Программы
Книги
Статьи

27_img

Микроконтроллеры Microchip®. Практическое руководство

Приведена справочная информация по наиболее популярным микро контроллерам Microchip®. Подробно описано начало работы с микрокон троллерами компании Microchip" ыа примере микроко^ггроллсра P1C16F84. Даны практические схемы и описания программатора, интегрированной среды разработчика MPLAB-IDE, иллюстрировано примерами простейших программ, подборкой практических примеров устройств на основе микроконтроллеров PIC. Рассмотрены принципиальные схемы и исходные тексты программ, тексты часто применяемых подпрограмм, таких, как конвертация чисел, работа с шиной O2С и т.д.


Скачать книгу  

Описание

ББК 32.97
Я 92
УДК 681.325.5
ЯцеР1ков В. С.
Я 92 Микроконтроллеры Microchip®. Практическое руководство — Москва:
Горячая линия-Телеком, 2002. — 296 с. ил.
ISBN 5-93517-061-2
Приведена справочная информация по наиболее популярным микро-
контроллерам Microchip®. Подробно описано начало работы с микрокон-
троллерами компании Microchip" ыа примере микроко^ггроллсра
P1C16F84. Даны практические схемы и описания программатора, интег-
рированной среды разработчика MPLAB-IDE, иллюстрировано примерами
простейших программ, подборкой практических примеров устройств на
основе микроконтроллеров PIC. Рассмотрены принципиальные схемы и
исходные тексты программ, тексты часто применяемых подпрограмм,
таких, как конвертация чисел, работа с шиной 1"С и т.д. Отдельное вни-
Maime уделено подборке ссылок на русско- и англоязычные ресурсы в
Интернет с их краткой аннотацией.
Предназначена разработчикам и^ радиолюбителям, занимающимся
проектированием различных устройств.
ББК 32.97
Яцепков Валерий Станиславович
MlVl АЯ МИКРОКОНТРОЛЛЕРЫ MICROCHIP®
ПРАКТИЧЕСКОЕ РУКОВОДСТВО
Реда1сгор Петкин А. Ю.
Подготовка оригинал-макета Рыськов Ю. И.
Подписа1Ю в печать 28.08.2001. Формат 60x88/16.
Бумага офсетная. Усл. печ. л. 18,5. Уч. изд. л. 22.
Тираж 5 000 экз. Заказ №4879.
ISBN 5-93517-061-2 *^ " © Яценков B.C., 2002
Отпечатано в полном соответствии с качестаом
предоставленных диапозитивов в Тульской типографии.
300600, г. Тула, пр. Ленина, 109.


h ?
i- •- - II'-/.
t
Предисловие
Эта книга не является классическим справочником, содержащим
только техническое описание некоторых микросхем. Автор предлагает
вашему вниманию настольную книгу, имея которую можно, что называ-
ется, "с нуля" начать работу с микроконтроллерами серии PIC и
научиться их программировать. В этом поможет подборка примеров
схем и программ с подробными комментариями. Разумеется, в ней при-
сутствует и необходимая справочная информация. Содержание разделе-
но на три основные части. В первой части приведена справочная инфор-
мация по наиболее популярным микроконтроллерам Microchip®. За ос-
нову взято описание микроконтроллеров PIC 16F84/CR84 и
PIC12C5XX. Знание устройства и особенностей применения контрол-
леров семейств Р1С12ххх и Р1С16ххх позволит без затруднений перей-
ти к применению более сложных^и мощных микроконтроллеров фирм
Microchip® и Scenix®.
Начинающему разработчику, не имеющему опыта работы с мик
роконтроллерами рекомендуется в общих чертах ознакомиться с опи
саниями, получить представление о возможностях и структуре микро
контроллеров и перейти ко второй и третьей частям. В дальнейшем,
по мере приобретения опыта, разработчик будет вынужден неодно
кратно обращаться к описаниям. Именно по этой причине, для удоб
ства работы, они вынесены в начало книги. . i .
Не секрет, что большинство начинающих разработчиков совер-
шают одни и те же ошибки, от которых не спасает применение фир-
менной документации. Опираясь на собственный опыт, автор снабдил
описания подробными комментариями, они выделены курсивом.
Во второй части подробно, по шагам, описано начало работы с
микроконтроллерами компании Microchip® на примере микроконт
роллера PIC16F84. Приведены схемы и описания программатора, ин
тегрированной среды разработчика MPLAB-IDE, примеры простей
ших программ. * ' iA»u;-j^M л:: /
Третья часть книги содержит подборку практических примеров
устройств на основе микроконтроллеров PIC. Приведены принципи-
альные схемы и исходные тексты программ. Также опубликованы
тексты часто применяемых подпрограмм, таких, как конвертация
чисел, работа с шиной PC и т.д. Завершает книгу подборка ссылок на
русско- и англоязычные ресурсы в Интернет с их краткой аннотацией.


Введение


? Т'


В настоящее время более тридцати зарубежных фирм выпускают
микроконтроллеры массового применения с разрядностью 8 бит, не-
дорогие и пригодные для использования в самых разнообразных при-
ложениях. Однако именно микроконтроллеры серии PIC фирмы
Microchip® Technology Inc. переживают последние три-четыре года в
России поистине взрывной рост популярности. Эти микроконтролле-
ры также крайне популярны во всем мире, как у производителей элек-
тронной техники, так и среди радиолюбителей.
В чем же причина такой популярности? Конечно, не последнюю
роль сыграли правильная маркетинговая политика, мощная и проду-
манная поддержка разработчиков со стороны фирмы и низкая стои-
мость микросхем. Кроме этого, сам продукт обладает целым рядом
неоспоримых достоинств. Микроконтроллеры PIC фирмы Microchip®
объединили в себе все передовые технологии, применяемые в произ-
водстве микроконтроллеров: развитую RISC-архитектуру, мини-
мальное энергопотребление при высоком быстродействии, ППЗУ,
программируемое пользователем, функциональную законченность.
Четкая и продуманная внутренняя структура контроллеров и не-
большая, но мощная система команд с интуитивно понятной мнемо-
никой значительно облегчают процесс изучения контроллеров PIC и
написание для них программ.
Для производителей электронной аппаратуры микроконтроллеры
PIC интересны обширным и законченным функциональным рядом,
возможностью заказа дешевых масочно-программируемых кристал-
лов при наличии отладочных кристаллов с флэш-памятью и УФ-
стиранием.
Микроконтроллеры серии PIC идеально подходят для организа-^
ции и развития малого и среднего бизнеса в области производства
электронной аппаратуры. При минимальных затратах рабочего вре-
мени и денежных средств можно легко наладить производство мини-
АТС, телефонных блокираторов, "интеллектуальных" датчиков сиг-
нализации, систем контроля доступа, автомобильной электроники и
т.п. Причем в таких изделиях от 30 до 90 процентов функциональной


Введение
нагрузки несет на себе программное обеспечение, которое может быть
легко модифицировано и приспособлено к нуждам потребителя.
Немаловажное значение имеет возможность защиты кода про-
граммы от несанкционированного копирования или изменения. На-
личие этой опции эффективно защищает права разработчика и про-
изводителя, и особенно важно в России, где эти права систематически
нарушаются. (Известны методы снятия бита защиты при помощи
специального программатора, но почти во всех последних версиях
кристаллов PIC фирма Microchip® устранила возможность нелегаль-
ного снятия бита защиты от считывания.)
Для радиолюбителей микроконтроллеры PIC также интересны до-
ступностью цены и простотой в освоении и применении, а также тем,
что открывают для них новые, ранее невиданные области творчества.
Радиолюбитель освобождается от непроизводительного труда, на-
правленного на подбор и поиск подходящих компонентов, разработку
сложной схемотехники реализованной на микросхемах жесткой
логики. Значительно упрощается сама конструкция устройства и по-
вышается надежность.
В сети Интернет помещено огромное количество сайтов и конфе-
ренций, посвященных микроконтроллерам серии PIC. Такое ко-
личество разнообразной информации, большей частью на английском
языке, способно вызвать растерянность у начинающего разработчика
или радиолюбителя.
В данной книге предпринята попытка объединить основополага-
ющие материалы по микроконтроллерам фирмы Microchip® таким
образом, чтобы начинающий их применять разработчик, будь то лю-
битель или профессионал-радиоинженер, нашел для себя ответ на во-
прос "С чего начать?" и получил стартовые навыки, а более подго-
товленный специалист приобрел полезную справочную информацию,
которая всегда будет под рукой.
Объем книги ограничен и за более полными сведениями читателю
неизбежно придется обратиться в Интернет. В конце книги приведена
подборка адресов официальных и любительских сайтов, на которых
размещена различная информация о применении микроконтроллеров
производства Microchip® Technology Inc. ' -'
Внимание!
Схемы, описания и листинги программ, помещенные в книге, предо
ставлены по принципу "as is" ("как есть"), являются свободно распро
страняемыми для ознакомления и любительского применения, но не под
лежат коммерческому использованию в составе изделий или разрабо
ток без согласия авторов. ;. .^


Введение
Все упомянутые в данном издании товарные знаки и зарегистрирован-
ные товарные знаки принадлежат их законным владельцам.
Благодарности.
Автор искренне благодарит за огромное количество любезно пре
доставленной полезной информации, помощь и советы своего друга и
коллегу Андрея Худоногова и рад отметить его незаменимую роль в
подготовке некоторых подпрограмм и схемных решений, использо
ванных в данной книге. "'*?*>;' и lUU: 'U,ii,J
Автор чрезвычайно признателен руководству и персоналу фирмы
"АТОС", www.atos.ru. за предоставленную техническую информацию
и образцы микросхем Dallas Semiconductor для испытаний и отладки.


Ч
-', .!i-'пает как знаковый \ разряд и
число FFh с установленным знаковым разрядом по законам
двоичной алгебры является минус единицей). При вычитании Olh
OOh получаем Olh и бит С = 0. Результат положительный. При
сложении FFh + 02h получаем Olh и бит С=1. Произошел перенос,
значит реальный результат 10 Ih. ^ При выполнении команд
сдвига RRF и RLF в этот бит за-. : гружается соответственно
младший или старший бит регист-• '' ра-источника.
Используя флаги ТО и FD можно определить, чем был вызван-
сброс. ^ .^ •
22


Микроконтроллеры PIC16F8x и PIC16CR8x
bitO RBIF - флаг прерывания по .изменению состояния на входах
RB7-RB4 ' ' 1 = на одном из выводов RB7-RB4 произошло
изменение уровня (следует сбросить программно!) О = не
происходило прерывание по изменению уровня Флаг используется
для определения источника прерывания.
. /; ПРОГРАММНЫЙ СЧЕТЧИК
Программный счетчик микроконтроллера (PC) содержит 13 раз-
рядов. Младший байт счетчика является полностью доступным для
чтения и записи регистром PCL (адрес 02h, 82h). Старшие пять байтов
счетчика непосредственно не доступны для чтения и записи. Обраще-
ние к ним происходит через регистр PCLATCH (адрес OAh, 8Ah), яв-
ляющийся буфером-защелкой для старших битов счетчика. Содержи-
мое PCLATCH переносится в старшие биты PC, когда происходит
запись нового значения в программный счетчик. Это случается, когда
выполняются команды CALL, GOTO или регистр PCL является реги-
стром назначения для результата арифметической операции.
Возможность выполнять арифметические операции непосредст-
венно над программным счетчиком позволяет очень просто и эффек-
тивно, всего двумя командами, выполнять табличную перекодировку
значений. Следует только контролировать исходное значение, чтобы
программный счетчик не вышел за пределы таблицы, если в ней при-
менено менее 256 записей. Подробно пример подпрограммы переко-
дировки рассмотрен далее, в разделе "Примеры прикладных подпро-
грамм".
Микроконтроллеры PIC16F83 и PIC16CR83 имеют 512 слов про-
граммной памяти, PIC16F84 и PIC16CR84 имеют 1К программной
памяти. Команды CALL и GOTO используют 11 бит для указания
адреса, что позволяет использовать 2К адресного пространства. Для
предстоящего расширения программной памяти PIC16F8x понадо-
бятся еще два бита, определяющие ее страницы. В качестве этих битов
будут использоваться разряды 4 и 3 регистра PCLATCH. При исполь-
зовании в программе команд CALL и GOTO надо быть уверенным,
что биты 4 и 3 в PCLATCH запрограммированы правильно и про-
изойдет переход на нужную страницу памяти. Сейчас биты 4 и 3 не
используются, однако для обеспечения совместимости "снизу вверх"
использовать их в своих программах в качестве битов общего на-
значения (например, для хранения флагов) не рекомендуется. '•'
25


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
СТЕК '"'^^'^'
Микроконтроллеры Р1С16Рхх имеют 8-уровневый 13-битный ап-
паратный стек. Стек не является частью памяти данных или программ
и указатель стека не доступен для чтения или записи.
Содержимое 13-битного программного счетчика загружается в
стек при выполнении команды CALL или переходе в подпрограмму
прерывания. При выполнении команд RETURN, RETLW и RETFIE
содержимое программного счетчика восстанавливается. ^^^.,
Стек организован как циклический буфер. Это означает, что после
того, как в стек записано восьмое значение, вновь поступившее девя-
тое значение будет записано на место первого, десятое на место вто-
рого и т.д. PI наоборот, если происходило восстановление программ-
ного счетчика восемь раз, то в девятый раз в него будет выгружено
первое значение.
Стек не имеет флаг-бита, показывающего переполнение или избы
точную выгрузку, поэтому пользователь должен самостоятельно сле
дить, чтобы уровень вложения подпрограмм в любой ситуации не
превышал восьми. ^
г^ОСВЕННАЯ АДРЕСАЦИЯ: РЕГИСТРЫ INDF И FSR "'*'*^^
^г Регистр INDF не является физическим регистром. При обращении
к этому регистру на самом деле адресуется регистр, адрес которого
указан в регистре FSR (т.е. FSR является указателем). Такая адреса-
ция является косвенной.
Пример косвенной адресации:
. - регистр общего назначения по адресу ОСЬ содержит значение Olh ;1г.
- регистр общего назначения по адресу ODh содержит значение B8h ^;^;,-
загружаем в регистр FSR значение ОСЬ J г- читаем значение из
регистра INDF и получаем значение Olh J. - инкрементируем на
единицу значение FSR (FSR=ODh); : , ,!. - читаем значение из
регистра INDF и получаем значение B8h
При попытке прочитать косвенным образом значение самого ре-
гистра INDF (FSR=0) всегда возвращается значение ООН. Попытка
косвенной записи в INDF исполняется как пустая операция (несмотря
на то, что биты регистра STATUS могут измениться).
Приведенный далее фрагмент программы, используя косвенную
адресацию, очищает регистры общего назначения (RAM), располо-
женные по адресам 20h-2Fh:
26


ПОРТЫ ВВОДА-ВЬгеОДА ,;
Контроллеры PICI6F8X имеют два порта ввода-вывода, PORTA и
PORTB. Каждый вывод порта может быть запрограммирован на ввод
или на вывод установкой соответствующего бита в регистрах TRISA
и TRISB. Выводимые значения фиксируются в регистрах-защелках
PORTA и PORTB. Направление ввода-вывода может бы1ь изменено в
произвольный момент времени. Кроме этого, некоторым выводам
присвоены дополнительные функции. а^.»^ ??^А»'* - ^.'о
ДВУНАПРАВЛЕННЫЙ ПОРТ А, РЕГИСТРЫ PORTA И TRISA
Регистр PORTA представляет собой 5-битную защелку. Линия
RA4 имеет триггер Шмитта на входе в режиме ввода и открытый
сток в режиме вывода. Остальные линии порта А по входу работают
со стандартными уровнями TTL, выходы подключаются к компле-
ментарным выходным CMOS драйверам. Линия RA4 используется
также как вход внешних тактовых импульсов для таймера TMRO.
Направление передачи данных для каждой линии программирует-
ся отдельно, установкой или сбросом битов bit0...bit4 регистра
TRISA. Установка бита в 1 настраивает соответствующую линию на
ввод. Выходной драйвер при этом переходит в высокоимпедансное
состояние. Установка бита в О настраивает линию порта на вывод и
выводит на нее содержимое соответствующего бита защелки PORTA.
По умолчанию при включении питания все линии настроены на ввод.
При чтении порта А всегда считываются действительные логические
уровни на выводах, независимо от того, запрограммированы отдель-
ные разряды как входы или как выходы.
Все операции записи в порт внутренне исполняются как чтение-
модификация-запись. Например, когда исполняется команда BSF
PORTA, 3 (установить в единицу бит 3 порта А), то со всех линий


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
порта А считываются реальные значения, присутствующие на выво-
дах в этот момент, модифицируется третий бит и все полученные
значения записываются в регистр-защелку PORTA. Таким образом,
некоторые биты защелки PORTA могут иметь непредсказуемые
значения. Если в процессе исполнения программы линии порта А по-
сле чтения будут перенастроены на вывод, на некоторых из них будут
выставлены непредсказуемые уровни, что может привести к неожи-
данным результатам в работе устройства. В процессе написания про-
граммы, перед изменением настройки линий порта, рекомендуется явно
задавать значения в загцелке PORTA для критичных линий.
Также следует учитывать инерционность внешних цепей при изме-
нении сигнала на линиях порта. Например, одна из линий порта была
настроена на вывод, и на ней присутствовал уровень логического но-
ля. Затем эту линию перенастроили на ввод, и, в соответствии со схе-
мой устройства, извне на линию поступает сигнал высокого уровня от
резистора, подключенного к питающей шине. Из-за паразитной емко-
сти монтажа и собственных емкостей других компонентов высокий
уровень на линии будет выставлен с некоторой задержкой, и при
чтении может быть получено непредсказуемое значение. Выходные
драйверы порта также обладают некоторой инерционностью. Поэтому
нежелательно, чтобы команда чтения порта шла сразу за командой
перенастройки порта с вывода на ввод. Рекомендуется пропустить
несколько командных циклов для установления уровней. Можно исполь-
зовать команду NOP.
Ниже приведен пример инициализации порта А:


CLRF
BSF
MOVLW
• I
';«.
MOVWF
Л!
BCF


PORTA
STATUS,
RPO OxlE
TRISA
STATUS,
RPO


".обнуляем
все биты в
защелке
•выбираем
банк 1
;значение,
побитно
определяю
щее
;направлен
ие
ввода/выв
ода для ^
;каждой
линии:
RAO -
вывод,
^
;RAl...RA4
-ввoд
;запись
значения в
управляю
щий
;регистр
(адрес 85h,
Bank 1)
;выбираем
банк О


Блок-схемы порта А для линий RA0...RA3 и RA4 изображены на
рисунке 1-3. ..?.^^. ,. :^


is-


Л
a^'isv.
k :t.i. ,.
=>
Л;.-? +
V',''-«


28


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
ДВУНАПРАВЛЕННЫЙ ПОРТ В, РЕГИСТРЫ PORTB И TRISB
Порт В представляет собой 8-битный двунаправленный порт.
Структурная схема порта представлена на рисунке 1-4. Выходные
значения записываются в регистр-защелку PORTB. Направление вво-
да-вывода определяется установкой или сбросом битов регистра
TRISB. Установка бита в 1 настраивает соответствующую линию на
ввод, переводя выходной драйвер в высокоимпедансное состояние, а~-0
- на вывод. При включении питания все линии по умолчанию настро-
ены на ввод. Как и для порта А, чтение порта В всегда возвращает
действительные значения на выводах, независимо от направления пе-
редачи данных для каждого вывода.
Все выводы порта В имеют встроенную отключаемую нагрузку в
виде резисторов, подключенных к шине питания (подтягивающие ре-
зисторы). Нагрузка включается и отключается одновременно для всех
выводов при помощи бита 7 RBPU регистра OPTION_REG. При
включении питания RBPU=1 и нагрузка отключена. Программное
обнуление бита RBPU подключает нагрузку, но для линий, настроен-
ных на вывод нагрузка автоматически отключается.
Линии RB4...RB7 могут использоваться как входы прерывания по
изменению уровня. В этом качестве используются только линии, наст-
роенные на ввод. В каждом командном цикле происходит сравнение
текущих значений на выводах с предыдущими, зафиксированными в
специальной защелке. Если хотя бы на одном из этих выводов про-
изошло изменение уровня, формируется прерывание. Длительность
импульса, который распознается как изменение уровня, должна быть
не менее 4-х периодов тактовой частоты. Программно распознать, по
какой из линий RB4...RB7 произошло прерывание, невозможно.
Это прерывание выводит контроллер из состояния SLEEP. В под-
программе обработке прерывания пользователь должен сбросить
прерывание одним из двух способов:
- обратиться для чтения или записи к порту В, при этом флаг-бит
RBIF регистра INTCON будет обнулен, ^^
- непосредственно обнулить флаг-бит RBIF ' '' '*'
Если не обнулить бит RBIF, то, после выхода из подпрограммы
обработки прерывания, контроллер вновь обнаружит прерывание и
уйдет на подпрограмму его обработки. Программа зациклится.
Прерывание по изменению уровня обычно используют для вывода
контроллера из режима SLEEP по нажатию кнопок клавиатуры. Ког
да разрешено прерывание по изменению уровня, не рекомендуется наст
раивать линии порта В RB4...RB7 на вывод и изменять на та уровень,
так как подобное изменение также мо:исет быть распознано как за-
прос прерывания.^^^.^ ^^, .^^ ^^^, ^ ^^^^ ^^^.^ ..^ ^^
30


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
OCOBEIfflOCin ТАКТИРОВАНИЯ ОТ ВНЕШНЕГО ИСТОЧНИКА
Инкрементирование от внешнего источника имеет ряд особеннос-
тей. Внешний сигнал стробируется внутренними импульсами синхро-
низации. Возникает некоторая задержка между фронтом входного
сигнала, и фронтом, по которому реально инкрементируется счетчик
TMRO. Эта задержка варьируется в пределах от 3 до 7 периодов коле-
баний тактового генератора. Например, при тактировании контрол-*
лера от кварцевого генератора ЮМГц задержка составит от 300 до 700
НС. Соответственно, погрешность измерения временного интерва-' ла
между внешними событиями составит ±400 не.
Стробирование происходит на выходе предделителя, дважды в'
течение каждого командного цикла, чтобы определить нарастание и
спад тактирующего импульса. Следовательно, длительность состоя
ний высокого уровня (Тв) и низкого уровня (Тн) на выходе преддели
теля должна быть не менее двух периодов синхронизации, плюс 20нс
на установление. ^ \\
Если предделитель не подключен, входной сигнал поступает на-'
прямую и должен иметь следующие параметры:
TH>=2*TOSC+20HC • 'ч жг.-.-,м.- .1 -»v , и^.5r.^^^ -^.^ти
TL>=2*TOSC+20HC . ^^, ., а., . ,, , |^> -^^
Если предделитель подключен, сигнал на его выходе всегда имеет
форму меандра. Длительности высокого и низкого уровня сигнала на
входе предделителя должны быть не менее 10 не. Следовательно,
входной сигнал на выводе RA4/T0CK при подключенном пределителе
должен иметь параметры: 15?.'
Тн>=10нс
TL>=10HC.
РАБОТА С EEPROM
Память данных EEPROM доступна для чтения и записи во всем
рабочем диапазоне питающих напряжений и предназначена для хра-
нения 8-битных значений. Перед записью нового значения предыду-
щее стирается. Микроконтроллеры PIC16F8x имеют 64 байта
EEPROM с адресами от OOh до 3Fh, но эти ячейки недоступны путем
прямой адресации в адресном пространстве микроконтроллера. Для
доступа к ним используется косвенная регистровая адресация через
специальные регистры. Всего при работе с EEPROM используется
четыре специальных регистра:
34 . i«ii64t.' *, W V.


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
Иногда, в зависимости от приложения, может потребоваться про-
верка правильности записи данных в EEPROM. Например, если вы
ввели в сигнализацию новый код доступа, а он записался неправильно,
то после перехода в рабочий режим сигнализация навсегда останется >
недоступной для управления, поскольку вместо вашего кода будет со-
хранено случайное число. Чаще всего происходит так называемая
утечка бита, когда бит, записываемый как "1", впоследствии читается
как "О". Для проверки, сразу после записи читают проверяемую ячейку и
сравнивают содержимое регистра EEDATA с правильным значением.
Если значения не совпали, либо предпринимают определенное число
попыток записи, либо сразу выдают сообщение об ошибке.
СЛОВО КОНФИГУРАЦИИ CPU
Слово конфигурации расположено по адресу 2007h. Этот адрес
находится за пределами пользовательской памяти программ и входит
в состав специального адресного пространства (2000h - 3FFFh), ко-
торое доступно только для программатора во время программирова-
ния. Слово конфигурации содержит 14 бит.


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
•'^ '• Сброс по переполнению сторожевого таймера (WDT) в режиме
-•.W' SLEEP .н тн«чг ил ..nr•y^.i\ i.'Xfiw^^*^ 1:!^.л>
'^^ На входе MCLR имеется триггер Шмитта, предохраняющий от
случайных кратковременных импульсов, вызванных шумами схемы
или внешними наводками.
На некоторые регистры состояние сброса не влияет. Их содержи
мое не определено при включении питания и не изменяется при ос
тальных вариантах сброса. Большинство остальных регистров уста
навливается в определенное состояние при включении питания, сбро
се по входу MCLR и WDT в нормальном режиме и сбросе по входу
MCLR в режиме SLEEP. На их состояние не влияет сброс по WDT в
режиме SLEEP, поскольку этот сброс рассматривается как восстанов
ление нормального режима (пробуждение). , j
Используя флаги ТО и PD регистра STATUS, можно определить,
чем был вызван сброс. Подробно этот вопрос рассмотрен в описании
регистра.
Если питающее напряжение при включении устанавливается до-
статочно быстро, не дольше, чем за 70мс, то можно обойтись без
внешней цепи сброса и подключить вывод MCLR непосредственно к
плюсовой шине питания. При достижении питающим напряжением
уровня L2-L7V сформируется внутренний сигнал сброса и начнется
отсчет времени задержки сброса специальным внутренним таймером
PWRT (Power-up timer). За это время питающее напряжение должно
подняться до нормального рабочего уровня. Таймер PWRT работает
от независимого встроенного RC-генератора, время задержки равня-
ется примерно 72мс и может несколько изменяться от кристалла к
кристаллу, а также в зависимости от температуры. После окончания
задержки таймера PWRT включается таймер запуска основного так-
тового генератора но он тактируется непосредственно.от этого гене-
ратора и отсчитывает 1024 импульса.
Таймер PWRT может быть включен или выключен изменением би-
та PWRTE в слове конфигурации.
Если питающее напряжение нарастает медленно, может понадо-
биться внешняя цепь сброса, показанная на рис. 1-П.
Если возможна ситуация когда питающее напряжение плавно сни-
жается ниже рабочего уровня, но не достигает ноля, а затем восста-
навливается, для надежного формирования уровня сброса необходимо
применить другую схему. На рис. 1-12 показана схема со стабили-
троном. Сброс формируется, когда питающее напряжение снижается
до уровня Vd+0.7, где Vd - напряжение стабилизации стабилитрона.
44


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
ОРГАНИЗАЦИЯ ПРЕРЫВАНИЙ
Микроконтроллеры PIC16F8X имеют четыре источника пре-
рываний:
(a) Внешнее по входу RBO/INT
(b) Внешнее по изменению состояния одной из линий RB4-RB7 порта В
(c) Внутреннее по переполнению таймера/счетчика TMRO
(d) Внутреннее по окончанию записи в EEPROM.
Для каждого из прерываний (а), (Ь) и (с) существует свой флаг-бит
в регистре INTCON, сигнализирующий о поступлении конкретного
вида запроса. Для прерывания (d) флаг-бит хранится в регистре
EECON1. Анализируя эти биты подпрограмма обработки прерываний,
начинающаяся с адреса 0004h, определяет источник прерывания.
Кроме этого, в регистре INTCON содержится бит глобального запрета
прерываний GIE и биты индивидуального запрета каждого преры-
вания. Когда бит GIE сброшен, все прерывания запрещены. При
включении питания бит GIE по умолчанию сброшен.
Когда поступает прерывание, бит GIE сбрасывается, чтобы не до-
пустить возникновения нового прерывания (поскольку у микроконт-
роллера Р 1С 16F8Xсуществует только один вектор прерывания), адрес
возврата загружается в стек, а в программный счетчик загружается
адрес-вектор 0004h. Инструкция возврата из подпрограммы обработки
прерывания RETFIE устанавливает бит GIE в единицу, тем самым
разрешая прерывания.
Обработка запроса внешнего прерывания может занимать три или
четыре командных цикла процессора, в зависимости от того, в какой
момент времени обнаружен запрос.
Все флаг-биты прерываний должны быть сброшены программно до
того, как прерывания вновь будут разрешены установкой бита GIE. В
противном случае может произойти повторный вход в прерывание и за-
цикливание программы. Также следует помнить, что флаг-биты преры-
ваний устанавливаются в соответствии с прерывающими событиями
независимо от того, замаскированы эти прерывания, или нет. Игнориро-
вание этих фактов приводит к достаточно распространенным ошибкам
программирования, которые могут проявить себя не сразу.
Например, запланировано, что прерывание по входу RBO/INT разре-
шено всегда, а прерывание по изменению состояния на входах RB4-RB7
разрешается периодически, в зависимости от алгоритма программы. Но
в результате ошибки программирования подпрограмма обработки преры-
46


Микроконтроллеры PIC16F8x и PIC16CR8x
вания не учитывает текущий контекст работы программы, не анализи-
рует, разрешены ли в данный момент прерывания по RB4-RB7, а просто
тестирует флаг-биты. Представим, что во время работы программы
произошло изменение уровня на одном из выводов RB4-RB7. Несмотря на
то, что это прерывание было замаскировано, флаг-бит RBIF будет ус-
тановлен. Если подпрограмма обработки прерывания первым тестирует
бит RBIF, то даже при входе в прерывание по сигналу на RBO/INT будет
принято ошибочное решение о том, что произошло прерывание по входам
RB4-RB7 И наоборот, если сначала тестируется флаг-бит INTF, то
может быть принято ошибочное решение о прерывании по RBO/INT, ког-
да реально прерывание вызвано изменением состояния входов RB4-RB7.
Чтобы избежать этой ошибки, нужно тестировать не только флаг-
бит, но и coomeemcmeywufuu маскирующий бит.
С другой стороны, иногда бывает удобно использовать флаг-биты
для программного обнаружения событий, не требующих прерывания
в момент их совершения. В этом случае прерывание маскируют и пе-
риодически, в нужный момент, тестируют флаг-бит.
Прерывание по входу RBO/INT может происходить по нарастанию
входного сигнала если бит INTEDG регистра OPTION_REG уста-
новлен или по спаду, если бит INTEDG сброшен. Когда происходит
заданный переход уровня, устанавливается флаг-бит INTF регистра
INTCON, Прерывание можно замаскировать, сбросив бит INTE.
Данное прерывание может вывести контроллер из реж:има SLEEP,
если перед входом в этот режим бит INTE был установлен в 1. Состо
яние бита GIE определяет, уйдет ли процессор на адрес-вектор 0004h
после пробуж:дения, или выполнение программы продолжится с теку
щего адреса. J4 •
Для обнаружения изменения уровня на одном из выводов RB4-RB7
и формирования запроса на прерывание необходимо, чтобы длитель-
ность импульса была не менее одного командного цикла процессора.
Микроконтроллеры PIC16F8X не имеют специальных команд PUSH
и POP для сохранения содержимого аккумулятора и специальных регист-
ров во время обработки прерывания с последующим их восстановлением.
Автоматически сохраняется только значение программного счетчика для
возврата из подпрограммы. Поэтому пользователь должен программно
сохранять значения аккумулятора (рабочего регистра W) и регистра
STATUS. Пример программы приведен ниже:
PUSH MOVWF W_TEMP ;Сохранили значение W в W TEMP
SWAPF STATUS, W Загрузили значение per. STATUS в
MOVWF ST.TEMP ;W и сохранили W в регистре ST_TEMP
-47


Использование команды SWAPF для загрузки и выгрузки значений
обусловлено тем, что эта команда не изменяет состояние флаг-бита нуле-
вого результата Z регистра STATUS. Применение команды MOVF со-
кратило бы программный код, но тогда при сохранении значения акку-
мулятора может быть изменено состояние бита Z, что в общем случае
недопустимо. Корректное программирование требует, чтобы при воз-
вращении из подпрограммы прерывания значения регистров W и
STATUS были восстановлены абсолютно точно.
СТОРОЖЕВОЙ ТАЙМЕР
Сторожевой таймер представляет собой комбинацию встроенного
RC-генератора и счетчика, при переполнении которого формируется
сброс процессора. Встроенный генератор не требует внешних цепей и
работает даже когда тактовый генератор процессора остановлен в реяси-
ме SLEEP. Между генератором и счетчиком может быть включен предце-
литель, параметры которого задаются битами регистра OinON_REG.
Время выдержки сторожевого таймера зависит от температуры,
напряжения питания и коэффициента деления предделителя. С под-
ключенным предцелителем и максимальным коэффициентом деления
1:128 выдержка может достигнуть 2,5 сек. Номинальная выдержка без
предделителя составляет около 18 мс.
Когда срабатывает сторожевой таймер, он не переводит вывод
MCLR в низкий уровень. Сброс осуществляется только по внутренним
цепям микроконтроллера.
Главным назначением сторожевого таймера является борьба с аппа-
ратными сбоями устройства. В устройствах, подверженных большому


Микроконтроллеры PIC16F8x и PIC16CR8x
уровню импульсных помех и высокочастотных наводок, наиболее часто
страдает содержимое регистра OPTION_REG. Кроме этого, возможны
непредсказуемые сбои в работе остальных модулей микроконтроллера и
периферийной части устройства. В результате может возникнуть
"зависание' программы. Если сторожевой таймер включен, то нормально
работающая программа должна периодически обнулять счетчик сторо
жевого таймера, не допуская сброса процессора. Когда происходит сбой,
сторожевой таймер перестает программно обнуляться, после его пере
полнения происходит сброс процессора и повторная инициализация уст
ройства. Для достижения максимальной защищенности от сбоев реко
мендуется выполнять следующие условия: гж^а-.у^/
- выбирать возможно меньший интервал сторожевого таймера и
сбрасывать его в разных местах программы;
- аппаратная часть устройства должна полностью инициализиро
ваться при любом сбросе процессора, а не только при включении пи
тания или нажатии кнопки "RESET". v
Команды CLRWDT и SLEEP обнуляют счетчик сторожевого тай-
мера и счетчик предделителя, если он подключен к сторожевому тай-
меру. Таким образом предотвращается сброс процессора и
начинается формирование нового временного интервала.
Сторожевой таймер также может вывести процессор из режима
SLEEP. При этом произойдет не сброс, а продолжение нормального
исполнения программы. ^^
Работа сторожевого таймера может быть разрешена или запреще
на только при помощи программатора, установкой или сбросом бита
конфигурации WDTE. ,^ ^,..,_
Э1ШРГОСБЕРЕГАЮЩИЙ РЕЖИМ SLEEP ^-^
Микроконтроллер переводится в режим SLEEP при выполнении
специальной команды SLEEP. Если сторожевой таймер включен, то
он обнуляется и начинает отсчет задержки заново. В регистре
STATUS сбрасывается бит PD и устанавливается бит ТО. Тактовый
генератор отключается. Выводы портов сохраняют состояние, кото-
рое было непосредственно перед исполнением команды SLEEP.
Чтобы потребляемый в этом режиме ток был минимальным, наст
роенные на вывод порты должны иметь значения, при которых через
них не будет протекать ток от внешних источников. Линии портов,
настроенные на ввод и имеющие высокое входное сопротивление,
должны быть соединены через внешние резисторы порядка 10 кОм с
шиной питания или общим проводом, чтобы исключить внутренние
токи переключения, вызванные хаотичными наводками на входы. Так
же следует поступить и с входом RA4/T0CKL На выводе MCLR дол
жен быть высокий уровень. • j.
49


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
ПРОБУ ЖДЕНИЕ ИЗ РЕЖИМ А SLEEP
Процессор может, быть выведен из режима SLEEP тремя раз-
личными способами:
(а) внешним сбросом по входу MCLR:
(б) при переполнении сторожевого таймера (если он включен);
(в) прерыванием по входу RBO/INT, по изменению состояния вхо
дов RB4-RB7 или по окончанию записи в EEPROM.
Событие (а) приводит к сбросу процессора и исполнению про-
граммы с начального адреса. Два остальных события приводят к
продолжению исполнения программы. Во время исполнения команды
SLEEP процессор загружает в буфер команд следующую команду
(РС+1). Чтобы контроллер вышел из режима SLEEP по прерыванию,
оно должно быть разрешено соответствующими битами.
Порядок пробуждения по прерыванию зависит от состояния бита
GIE. Если этот бит сброшен, то после пробуждения выполняется
команда, следующая за командой SLEEP (и уже загруж:енная в буфер)
и далее по порядку Если бит GIE установлен в 1, то систола исполня-
ется команда, загруж:енная в буфер, а затем процессор переходит на
адрес-вектор прерывания 0004h. Если исполнение команды, следующей
за SLEEP, при выходе по прерыванию неж:елательно, то сразу после
команды SLEEP долж:на следовать команда NOP.
Когда бит GIE глобального разрешения прерываний сброшен и
возникает ситуация, при которой для любого из прерываний одно-
временно установлены бит разрешения и флаг-бит, происходит одно
из следующих событий:
• Если событие прерывания произошло до испотнения команды
SLEEP, то эта команда исполняется как NOP. Сторожевой таймер и
предделитель не очищаются, бит ТО не устанавливается и бит PD не
сбрасьшается.
Если событие прерывания произошло во время или после исполнения
команды SLEEP, то устройство немедленно пробуждается из режима
SLEEP. Команда SLEEP отрабатывается полностью, даже если прерыва-
ние произошло в момент ее действия. Сторожевой таймер и предделитель
очищаются, устанавливается бит ТО и сбрасывается бит PD.
Даже если протестировать флаг-биты перед началом исполнения
команды SLEEP, возможна ситуация, когда некий флаг-бит будет уста
новлен до того, как команда SLEEP будет завершена. Чтобы убедиться,
исполнялась ли команда SLEEP, протестируйте бит PD. Если бит PD
установлен, значит, команда SLEEP была исполнена, как NOP.

>
50


Микроконтроллеры PIC 16F8х и PlCl6CR8x •»«»^
Аннулировать все действия по переключению страниц памяти
данных. Переопределить расположение переменных
(присвоить им новые адреса рабочих регистров).
Проверить все операции с регистрами STATUS, OPTION и
FSR, в результате которых их содержимое может быть изме
нено. Удостовериться, что результат будет соответствовать
ожидаемому значению.
Измените адрес-вектор сброса на OOOOh. .. ''

МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА PIC12C5XX
Микроконтроллеры семейства PIC12C5XX можно, пожалуй,
считать вторыми по популярности в радиолюбительской практике
контроллерами фирмы Microchip®. Они также очень поп>лярны у
разработчиков различных портативных устройств типа брелков сиг-
нализаций, автоматов прогрева двигателя, пультов дистанционного
управления, приемников сигналов ДУ и множества других приложе-
ний, требующих применения недорогого и экономичного контролле-
ра. К сожалению, семейство PIC12C5XX не имеет варианта с FLASH-
памятью программ,-но выпускаются отладочные кристаллы с ультра-
фиолетовым стиранием. Они достаточно дороги (в России до 7 8
долларов против цены в 1,5-2 доллара за обычный корпус). Кроме
этого, кpиctaллы с ультрафиолетовым стиранием весьма капризны и
чувствительны к времени стирания и питающему напряжению.
В радиолюбительской практике и при разработке не очень слож
ных приложений вполне можно обойтись программной симуляцией с
помощью MPLAB. Некоторые фрагменты можно отладить и при по
мощи PIC16F84, но надо учитывать разницу во внутреннем устройст
ве и отсутствие у PIC16F84 внутреннего RC-генератора, работающего
без навесных элементов. •
Микроконтроллеры семейства PIC12C5XX поддерживают про-
граммирование в готовом устройстве при помощи последовательного
канала. В большинстве случаев для этого достаточно соединить через
разъем выводы контроллера в готовом устройстве с соответствую-
щими выводами панельки программатора. Для попучения более по-
дробной информации следует обратиться к фирменному описанию
стандартов программирования микроконтроллеров PIC.
Мы рассмотрим конгроллеры. перечень которых приведен в таб-
лице: *
73


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
Как наглядно показано на рисунках I-I6 и 1-17, контроллеры
PIC12C5XX имеют 7 регистров специального назначения по адресам
OOh - 06h. Если контроллер имеет два банка данных, как показано на
рис. 1-17, то обращение к адресам диапазона 20h - 2Fh дает
зеркальный доступ к адресам OOh - OFh. Например, обращения по
адресам 03h и 23h одинаково адресуют регистр специального на-
значения STATUS, а обращения по адресам 09h и 29h адресуют один
и тот же регистр общего применения. Но по адресам lOh - IFh и 30h -
3Fh расположены разные банки, Банк1 и Банк 0. Адресация к
регистрам общего применения в этих банках происходит при участии
специального регистра FSR. Если биты 6 и 5 FSR имеют значения 00,
то адресуется Банк О, если 01, то адресуется Банк 1.
СПЕЦИАЛЬНЫЕ РЕГИСТРЫ
Специальные регистры представляют собой статическое ОЗУ, в
котором некоторые биты устанавливаются по умолчанию при сбросе
(см. таблицу 1-4).
РЕГИСТР STATUS (АДРЕС ОЗН)
Регистр STATUS хранит арифметические флаги АЛУ, информа-
цию о сбросе и бит выбора страницы программной памяти, если она
превышает 512 слов. Как и большинство регистров, STATUS может
являться регистром назначения для любой операции. Но если над
регистром STATUS выполняют операцию, которая может изменить
состояние битов Z, DC и С, то запись в эти три бита блокируется. Их
состояние изменяется только аппаратно, в зависимости от состояния
АЛУ. Более того, биты ТО и PD также недоступны для записи. Сле-
довательно, результат операции с регистром STATUS в качестве
цриемника может оказаться совсем не таким, как ожидалось. Напри-
мер, команда CLRF STATUS (очистить полностью регистр STATUS)
на самом деле очистит только три старших бита и установит в 1 бит Z.
Поэтому к регистру STATUS следует применять только команды
BCF, BSF и MOVWF, потому что они не изменяют другие биты со-
стояния.
Рассмотрим подробно назначение битов регистра STATUS:
bit7 GPWUF - бит сброса регистра GPIO
1 = сброс по выходу из SLEEP при изменении уровня на выводе
О = после включения питания или по любому другому сбросу
bit6 Не используется
\^^^9^V ^* « *>*-.Г^ ---».» -'= f
82


Микроконтроллеры PIC12C5xx ««Jf
ПРОГРАММНЫЙ СЧЕТЧРПС
Когда выполняется команда программы, программный счетчик
уже содержит адрес команды, которая будет выполняться следующей.
Таким образом реализован конвейер команд, позволяющий
значительно увеличить быстродействие. В каждом машинном цикле
значение программного счетчика увеличивается на единицу. Ис-
ключение составляют команды, модифицирующие значение про-
граммного счетчика.
Когда выполняется переход по команде GOTO, в биты 0...8 пере-
носится значение операнда из командного слова, а в бит 9 записыва-
ется значение бита выбора страницы из регистра STATUS.
Когда выполняется команда CALL или любая команда, исполь-
зующая программный счетчик в качестве получателя, в биты 0...7
записывается значение из командного слова, в бит 8 записывается
ноль, а в бит 9 значение бита выбора страницы из регистра STATUS.
К командам, которые используют программный счетчик в качестве
получателя значения, относятся MOVWF PC, ADDWF PC, BSFPC,5.
Так как бит 8 всегда устанавливается в ноль при вызове подпро-
грамм или модификации счетчика, все команды вызова подпрограмм или
вычисляемые переходы выполняются только в пределах первых 256 ад-
ресов любой страницы.
При программировании перехода или вызове подпрограммы следует
быть уверенным, что в регистре STATUS, бит РАО, заранее указана
нужная cmpaHuifa. Можно воспользоваться директивами ассемблера
д/1я автоматической вставки кода выбора страницы в момент компо-
'новки.
ДЕЙСТВИЯ ПРИ СБРОСЕ ,/ f
После сброса микроконтроллера программный счетчик устанав-
ливается на последнюю ячейку памяти программ на последней стра-
нице и считывает находящуюся там команду MOVLW хх, где хх - ка-
либровочная константа встроенного RC генератора. После выполне-
ния команды программный счетчик переходит на адрес OOOOh, а
значение калибровочной константы оказывается в аккумуляторе W.
Пользователь может переписать калибровочную константу в регистр
OSCCAL или проигнорировать ее.
87


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
СТЕК
Контроллеры PIC12C5XX имеют 12-битный стек типа LIFO
(последнее записанное значение вызывается первым). При выполне-
нии команды CALL значение из первой ячейки стека смещается во
вторую, а в первую ячейку записывается адрес возврата из текущей
подпрограммы. Если подпрограммы вызывались более двух раз под-
ряд, то сохраняются только последние два адреса возврата.
Микроконтроллеры PIC12CXXX не имеют бит-флага, сообщающе
го о переполнении стека или его избыточной выгрузке, поэтому про
граммист должен самостоятельно следить за корректностью своей
программы и не допускать более одного вложения подпрограмм. ' "-
Для PIC12C5XX не существует специальных команд PUSH гит POP.
При необходимости сохранения значения аккуму.пятора, программист
долж:ен записывать значение W в регистр общего применения перед вызо-
вом подпрограммы и извлекать обратно после возвращения из нее.
При выполнении команды RETLW содержимое первой ячейки
стека загружается в командный счетчик, а значение из второй ячейки
переходит в первую. Если выполнено более двух команд RETLW, то
стек заполняется значением из второй ячейки. После сброса содержи-
мое стека не изменяется, но программный счетчик всегда обнуяется.,
При выполнении команды RETLW в аккумулятор записывается
значение константы, которая является операндом команды. Это очень
удобно при реализации табличной перекодировки данных. " '^'
" • КОСВЕННАЯ АДРЕСАЦИЯ: РЕГИСТРЫ INDF И FSR
Регистр INDF не является физическим регистром. При обращении
к этому регистру на самом деле адресуется регистр, адрес которого
указан в регистре FSR (т.е. FSR является указателем). Такая адреса
ция является косвенной. Регистр FSR имеет разрядность 5 бит и при
помощи битов 0...4 позволяет адресовать память данных в диапазоне
OOh - IFh. Если память данных не разбита на банки, то биты 5...7 не
используются и читаются как "1". Если память данных разбита на два
банка (PIC12C509, PIC12C509A, PIC12CR509A, PIC12CE519), то бит
5 используется для указания банка, биты 6., Л не используются и все
гда читаются как "1". J
''пример косвенной адресации: J •'
- регистр общего назначения по адресу 07h содержит значение Olh;
- регистр общего назначения по адресу 08h содержит значение B5h;
- загружаем в регистр FSR значение 07h;
- читаем значение из регистра INDF и получаем значение Olh;
'88


Микроконтроллеры PIC12C5xx ^^ } а .ц\^


- инкрементируем на единицу значение FSR (FSR=08h);
-читаем значение из регистра INDF и получаем значение B5h;
При попытке прочитать косвенным образом значение самого ре-
гистра INDF (FSR=0) всегда возвращается значение OOh. Попытка
косвенной записи в INDF исполняется как пустая операция (несмотря
на то, что биты регистра STATUS могут измениться).
Приведенный далее фрагмент программы, используя косвенную
адресацию, очищает регистры общего назначения (RAM), располо-
женные по адресам lOh-lFh:
MOVLW
0x10 -
MOVWF
FSR
CLRF
INDF
INCF
FSR,F
BTFSS
FSR, 4
GOTO
NEXT
'? ;устанавливаем указатель
;на стартовый адрес RAM
NEXT CLRF INDF ;очищаем регистр INDF >..
?iiҐ 'JV'.r AlNCh FbK,!:; ;инкрементируем указатель
;закончили очистку? ;нет,
очистить следующую ячейку ;если
да, продолжить программу
ПОРТЫ ВВОДА-ВЫВОДА
Как и у для всех остальных регистров, значение регистра вво-
да/вывода может быть программно прочитано или записано. Инст-
рукции чтения данных из регистра портов (например, MOVF GPIO,
W) всегда считывают с выводов реально присутствующие уровни, не-
зависимо от того настроена ли линия порта на ввод или вывод. Если,
например, линия настроена на вывод и высокий выходной уровень,
но внешнее воздействие удерживает низкий уровень, то с этой линии
будет читаться "О". По сбросу все линии порта настраиваются на ввод
и имеют высокоимпедансное состояние. ' , . •> а:» ' - f-viniKAt^jc.'- ^*
РЕГИСТР GPIO
GPIO - это восьмиразрядный регистр ввода/вывода. Используются
только младшие 6 бит GP0..,GP5. Биты 6 и 7 недоступны и всегда
читаются как "О". Не забывайте, что линия GP3 (4) работает только
на ввод. Слово конфигурации может присвоить линиям различные,
функции независимо друг от друга. Если выводы исполняют альтер-
нативные функции, не относящиеся к вводу-выводу, то при чтении
значений с этих выводов всегда возвращается значение "О". Выводы
GPO, GP1 и GP3 могут быть настроены на подключение внутренних
89


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
подтягивающих резисторов и на вывод из режима SLEEP по измене-
нию входного уровня Имейте в виду, что функция выхода из SLEEP
по изменению уровня не различает эти три вывода между собой. Если
вывод (4) сконфигурирован, как вход сброса MCLR. то к этому выво-
ду всегда подключен подтягивающий резистор и выход из режима
SLEEP по изменению уровня для этого вывода не задействован (что,
впрочем, неудивительно ©).
РЕГИСТР TRIS
Регистр TRIS управляет режимом ввода/вывода каждой линии
порта. Управляющие биты записывают в регистр TRIS из аккумуля-
тора W командой TRIS f. Установка бита в " 1" настраивает соответ-
ствующую линию на ввод, а "О" на вывод. Исключение составляют
линия GP3, работающаа только на ввод, и GP2, которая может уп-
равляться регистром OPTION. Прочтите примечания, приведенные в
описании регистра OPTION.
ОБМЕН ДАННЫМИ С ПОРТОМ ВВОДА/ВЫВОДА
Эквивалентная схема порта ввода /вывода приведена на рис. 1-18.
Все выводы порта, исключая GP3, могут быть использованы как для
ввода, так и для вывода. На схеме не показаны защитные диоды, под-
ключенные от вывода порта к Vcc и Vdd.
Входные значения на выводах нигде не защелкиваются. Значение
должно непрерывно присутствовать на выводе, пока выполняется
команда чтения, например, MOVF GPIO, W. Выходные значения за-
щелкиваются в триггере и сохраняются до тех пор, пока не будут из-
менены следующей командой.
Все операции записи в порт внутренне исполняются как чтение-'
модификация запись. Например, когда исполняется команда BSF или
BCF, то со всех линий порта считываются реальные значения, при-
сутствующие на выводах в этот момент, модифицируется указанный
бит и все полученные значения записываются в выходную защелку.
Таким образом, некоторые .биты выходной защелки могут иметь
непредсказуемые значения. Если в процессе исполнения программы
линии порта после чтения будут перенастроены на вывод, на некото-
рых из них будут выставлены непредсказуемые уровни, что может
привести к неожиданным результатам в работе устройства. В процессе
написания программы, перед изменением настройки линий порта, реко-
мендуется явно задйватъ значения в выходной загцелке для критичных
линий. :''гл:^ ' -:. :^'.' " = "
90


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
ко. Например, у автомобиля, оснащенного сигнализацией, после трех
пинков по колесу иногда будут самопроизвольно открываться замки
дверей ©. ^2 : л •-
Также следует учитывать инерционность внешних цепей при изме
нении сигнала на линиях порта. Например, одна из линий порта бы
ла настроена на вывод, и на ней присутствовал уровень логического
ноля. Затем эту линию перенастроили на ввод, и, в соответствии со
схемой устройства, извне на линию поступает сигнал высокого уров
ня от резистора, подключенного к питающей шине. Из-за паразитной
емкости монтажа и собственных емкостей других компонентов высо
кий уровень на линии будет выставлен с некоторой задержкой, и при
чтении может быть получено непредсказуемое значение. Выходные
драйверы порта также обладают некоторой инерционностью. Поэто
му нежелательно, чтобы команда чтения порта шла сразу за коман
дой перенастройки порта с вывода на ввод. Рекомендуется пропус
тить несколько командных циклов для установления уровней. Можно
использовать команду NOP. .
^^ г МОДУЛЬ TIMERO И РЕ1ИСТР TMRO 1 |
Модуль TimerO имеет следующие характеристики:
• 8-разрядный, доступный для чтения и записи регистр TMRO. •
• 8-разрядный программно настраиваемый предделитель.
• Выбор источника тактирования. li ^.р^^
• Выбор активного фронта при внешнем тактировании.
На рис. 1-19 показана структурная схема модуля TimerO.

,
Режим таймера включается обнулением бита TOCS регистра
OPTION. Когда включен режим таймера, регистр TMRO инкременти-
руется с каждым машинным циклом (без предделителя). Если в ре
гистр TMRO записано новое значение, то следующие два машинных
цикла инкремент запрещен. При проведении точных измерений вре
менных интервалов пользователь должен учитывать этот факт и со
ответственно корректировать записываемое начальное значение

,
Режим работы от внешнего тактового сигнала, называемый также
режимом счетчика, выбирается установкой в "1" бита TOCS. В этом
режиме инкремент происходит по каждому нарастанию или спаду
входного сигнала на входе TOCKI. Активный фронт сигнала выби
рают битом TOSE регистра OPTION. "^
Предделитель может быть подключен либо к модулю таймера, ли-
бо к сторожевому таймеру WDT, но никогда к обоим одновременно.
Подключение предделителя задается битом PSA регистра OPTION.
Биты PS2.. .PSO устанавливают коэффициент деления.
гг> 4 4 * ? > ь
92 .


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
Внешнее тактирование таймера
Когда используется внешнее тактирование таймера, следует по-
мнить, что из-за необходимости синхронизации внешнего сигнала с
внутренними тактовыми импульсами Tosc к входному сигналу предъ-
являются некоторые особые требования и существует задержка между
появлением активного фронта и фактическим инкрементом TMRO.
Если TMRO настроен на работу от внешнего источника тактовой
частоты, то линия GP2 работает на ввод независимо от значения бита 2
регистра TRIS.
Синхронизация с внешним сигналом
Когда предделитель не используется, входной тактовый сигнал
поступает прямо на вход синхронизатора. Распознавание перепадов
входных тактовых импульсов осложняется тем, что состояние на входе
синхронизатора опрашивается только дважды за машинный цикл, во
время тактов Q2 и Q4. Поэтому длительность надежно
распознаваемого высокого или низкого уровня входного сигнала не
может быть меньше 2Tosc+2C не, с учетом небольшой паразитной
задержки в RC цепях, а полный такт соответственно не менее 4Tosc+40
НС.
Когда используется предделитель, внешние тактовые импульсы
делятся ассиметричным счетчиком и на выходе предделителя по-
лучается меандр. Длительность высокого или низкого уровня импульса
не должна быть меньше 10 не из-за небольшой инерционности
входных цепей. Суммарная длительность такта внешней частоты на
входе TOCKI должна быть не менее (4Tosc+40 нс)/К, где К - коэффи-
циент деления предделителя.
*" Задержка инкремента ." , :
Поскольку выход предделителя синхронизируется с внутренней
тактовой частотой, существует небольшая задержка между моментом
появления активного фронта на входе предделителя и моментом ин-
кремента регистра TMRO. Задержка может составлять от 3Tosc до
7Tosc. Таким образом, максимальная погрешность измерения вре-
менных интервалов между внешними событиями составляет ± 4Tosc.
ПРЕДДЕЛИТЕЛЬ
Счетчик 8-разрядный используется, как предделитель для таймера
TimerO и постделитель для сторожевого таймера WDT, но для простоты
мы будем называть его в этом описании предцелителем. Еще раз на-
помним, что предделитель не может быть подключен одновременнно к
94


Микроконтроллеры PIC12C5xx
сторожевому таймеру и таймеру/счетчику. По сбросу предцелитель
подключается к WDT и имеет максимальный коэффициент деления.
Когда предделитель подключен к TMRO, любая команда записи в
этот регистр будет обнулять предцелитель. Когда предцелитель под-
ключен к сторожевому таймеру, команда CLI?.WDT будет очищать
предцелитель вместе со сторожевым таймером. Предцелитель недо-
ступен для программного чтения или записи. При сбросе предцели-
тель сбрасывается в "О".
Переключение предцелителя
Подключение предцелителя полностью управляется программно,
его можно переключить "на лету", во время исполнения программы.
Для предотвращения неожиданного сброса процессора при пере-
ключении предцелителя с TMRO на WDT обязательно следует выпол-
нять специальную последовательность команд:
CLRWDT • ; Очистка WDT. г-
CLRF TMRO -Tj^ ; Очистка TMRO и предцелителя.
MOVLW 'ООххППЪ ?', ; Следующие три линии (^Acy/7CMe^ •*
OPTION " ; вставляются только при необходимости
CLR WDT ; задать значения PS2.. .PSO = 000 или 001.
МО VL W 'OOxxlxxxЪ; Установка требуемого значения
OPTION ; предцелителя.
Для переключения с WDT на TMRO следует выполнить другую по-
следовательность команд. Эти команды должны быть выполнены,
даже если сторожевой таймер отключен.
CLRWDT ; Очистка WDT и предцелителя.
MOVLW 'ххххОхххЪ ; Выбор TMRO, нового коэффициента
OPTION ; предделителя и источника тактиро-
" вания.
' * РАБОТА С EEPROM .. -
(ТОЛЬКО ДЛЯ PIC12CE518 И PIC12CE519)
Микроконтроллеры PIC12CE518 и PIC12CE519 имеют 16 байт
электрически стираемой/программируемой постоянной памяти
(EEPROM). Эти ячейки допускают до одного миллиона циклов сти-
рания/записи и могут хранить данные без перезаписи и внешнего пи-
тания более 40 лет Физически EEPROM представляет собой отдель-
ную технологическую структуру на кристалле, подключаемую к про-
цессору при помощи двунаправленной двухпроводной шины. Эта
шина состоит из линии последовательной передачи данных (SDA) и
95


Часть 1. Обзор микроконтроллеров PIC фирмы Microchip
линии тактирования (SCL). Эти линии увязаны соответственно с би
тами bit6 и bit? регистра GPIO (SFR 06h). '.
К сожалению, только линии GP0-GP5 разведены на внешние вы
воды микросхемы, поэтому линии SDA и SCL подключены ис
ключительно к внутренней периферийной EEPROM. Для работы со
встроенной EEPROM существуют специальные подпрограммы, до
ступные на сервере www.microchip.com. Этих подпрограмм достаточно
для абсолютного большинства приложений. Мы не будем приводить
здесь полный текст подпрограмм, а лишь перечислим их:
1. Подпрограмма записи байта
Имя: Byte_Write . ц
Входные значения (имена переменных):
адрес для записи - EEADDR; ^ .
байт для записи EEDATA;
Выходное значение:
Если запись прошла успешно, 01 в аккумуляторе W, иначе воз
вращает значение 00. *^'**
2. Чтение текущего байта по адресу, защелкнутому в собственном
указателе EEPROM на данный момент
Имя: Read_Current
Входные значения: нет. . ,*,,
Выходные значения: ч. .. • . -Of» Т! ^ lOV^
прочитанный байт - EEDATA; '
если чтение прошло успешно, 01 в аккумуляторе W, иначе возвра-
щается значение 00.
3. Чтение байта по произвольно указанному доступному адресу:
Имя: Read_Random
Входные значения (имена переменных): » '
адрес для чтения байта - EEADDR. i' • •:' л> / /''^^ л V' >^Л
Выходные значения: • 'U ^'
прочитанный байт - EEDATA;
если чтение прошло успешно 01 в аккумуляторе W, иначе возвра-
щается значение 00.
Эти подпрограммы будут доступны для вызова, если вы скачаете
по указанному адресу и включите в свой исходный файл текст из файла
FL51XINC.ASM или подключите для компоновки файл
FLASH51X.ASM. Если предлагаемые фирмой Microchip® подпро-
граммы по каким-либо причинам вас не устраивают, обратитесь к
фирменному описанию протокола работы со внутренней EEPROM в
руководстве для микроконтроллеров серии PIC12C5XX - документ №
DS40139E, стр. 29-34. Разумеется, вы можете подключить к контрол-'
леру и внешнюю FLASH-память, но для этого придется использовать
96


" ?JAl» ?.4.


Простой
програм
матор
Р16РО


ПРОСТОЙ ПРОГРАММАТОР P16PRO
СХЕМА И ПЕЧАТНАЯ ПЛАТА
Для записи программ в микроконтроллер можно приобрести го-
товый программатор или изготовить его самому. Существует множе-
ство различных схем программаторов, однако одним из самых попу-
лярных во всем мире является программатор, который разработал
Bojan Dobaj из Словении. Им разработаны несколько вариантов про-
грамматора, в том числе и для профессионального применения. Мы
рассмотрим любительский программатор, простой и очень надежный.
Схема программатора и упрощенное программное обеспечение рас-
пространяются свободно для некоммерческого применения. Подроб-
ную информацию об этом и других программаторах можно получить
по адресам в Интернет:
Н'У^'И'.geocities. coni/bdobai/ или www.bigfoot.coniZ-bojan.dobaj/ (подборка
адресов). ^ Ь^ J
Там же можно загрузить необходимое программное обеспечение,
как бесплатное, так и shareware. Бесплатная программа версии "Light",
поддерживает работу только с контроллерами PIC16F84/ PIC16C84.
Схема программатора показана на рис. 2-1 и 2-2.
Номиналы некоторых элементов, как это показано на схеме, могут
иметь значительный разброс. Если вы используете материнскую плату
с процессором 486 или Pentium, со встроенным на плату портом
принтера, установите керамический конденсатор С4 емкостью
330...470 пФ. Возможно, также понадобится установить дополни-
тельный резистор R8 номиналом 4,7... 10 кОм. В качестве буфера с
открытым коллектором можно применить как инвертирующие эле-
менты 74LS05, 74LS06 (КР1533ЛН2), так и неинвертирующий 74LS07.
Эта опция устанавливается в программе "P16PRO Light". По
умолчанию программа настроена на применение инвертирующего
буфера. Микросхемы устаревших серий К155, К133, 74S... не подой-
дут, поскольку, во-первых, вызывают сильный нагрев стабилизатора
78L05 потребляемым током и, во-вторых, с компьютерами, имеющими
процессор Pentium и встроенный быстродействующий порт принтера,
программатор на таких микросхемах работает со сбоями.
Чертеж печатной платы показан на рис. 2-3. По замыслу разра-
ботчика, в плату впаиваются проводники длиной не более 2-х метров,
припаянные вторым концом к стандартному 25-контактному разъему,
подключенному к разъему параллельного порта компьютера. Если к
этому разъему подключен принтер, то его приходится постоянно
отключать от компьютера, что весьма неудобно.
111


Простой программатор Р16РО
новки, в котором выводы микросхемы зажимаются поворотом
рычажка, но при его отсутствии подойдет обычная 18-контактная
панелька. Для облегчения установки/извлечения контроллера из нее
можно удалить неиспользуемые контакты.
Будьте очень внимательны при установке микроконтроллера в па-
нельку программатора. Автомат программирования в микроконтрол-
лерах Р 1С не имеет надемсной защиты от входных перегрузок и легко
выходит из строя. При установке контроллера в программатор его
питание должно быть выюгючено. Автор программатора разрешает
вставлять котро.ыер при включенном питании, но иногда случаются
сбои в работе параллельного порта, например, когда из другого окна
Windows вы случайно пошлете задание на печать и включится напря-
жение программирования. Установка контроллера в программатор или
извлечение из него при включенном напряжении программирования с ве-
роятностью 90% приведет к выходу кристалла из строя. Установка
микроконтроллера в панельку "наоборот", т.е. с разворотом на 18(f,
тож:е мом:ет привести к выходу из строя, но реж:е, поскольку сраба-
тывает встроенная защита микромощных стабилизаторов 78L05 и
После сборки программатора, не подключая его к компьютеру и не
устанавливая микроконтроллер в панельку, визуально проверьте
правильность монтажа, подайте на программатор питание и измерьте
напряжения в контрольных точках (выходы стабилизаторов). При
этом должны гореть оба светодиода. Если напряжения соответствуют
норме, отключите питание, подключите программатор к порту прин-
тера, подайте питание и запустите программу "P16PRO Light". Дол-
жен гореть один зеленый светодиод "ready". Как правило, если нет
ошибок в монтаже, никакой другой проверки либо отладки про-
грамматор не требует и работает без сбоев. Если в процессе записи
программа будет выдавать сообщение "Programming Failure"
(Программирование прервано), значит, либо неисправен микроконт-
роллер, либо надо подобрать номинал конденсатора С4.
РАБОТА С ПРОГРАММОЙ "P16FRO LIGHT"
Установка программы:
1. Создайте новую папку с любым удобным названием и в любой
поддиректории.
2. Если вы загрузили из Интернет zip-архив, распакуйте его в но-
вую папку, либо просто скопируйте в нее имеющиеся файлы.
3. При необходимости настройте параметры программы (один
раз), как будет описано далее. ... ^ .
115


Часть 2. Руководство для начинающих. Первые шаги
4. Файл DEVICE.INI обязательно должен находится там же, где и
P16PROL.EXE. . i
На этом установка программы закончена. Подключите програм-
матор к порту принтера.
МЕНЮ И ФУНКЦИОНАЛЬНЫЕ Ю1АВИШИ
Программа "P16PRO Light" управляется при помощи ниспадающих
меню, функциональных клавиш с F1 по F12 и некоторыми другими кла-
вишами, назначение которых будет описано далее. Ниспадающие меню
включаются нажатием комбинации Alt-Z, где Z - соответствующая кла-
виша. Например, меню "File" включается клавишами Alt-F. Для переме-
щения по диалоговым окнам и управления опциями необходимо исполь-
зовать курсорные клавиши, Esc, Tab, Enter и пробел.
Описание программы подходит такж:е для полной платной версии
"P16PR0".
.,. _. ^ Меню "File"
Open program - открывает заданный .hex файл (код программы), со-
зданный при помощи MPASM, MPALC, МРС и т.п. в формате INH8M
или INH16. Если вы используете MPLAB или MPASM, вам нет необхо-
димости заботиться о формате файла - форматы выходного файла ассем-
блера и входного файла программатора по умолчанию совпадают.
Save Program - сохраняет текущий код программы, слово конфи
гурации, а также данные EEPROM контроллеров PIC16C84/F84 в за
данный .hex файл. .: . ,
F9 - очистка микроконтроллера (стирание памяти программ и
EEPROM) . .,
F10 - выход из программы я •
F11 - очистка программного буфера и данных EEPROM '
F12 - повторное чтение последнего .hex файла - сдвиг
кодов программы в окне на страницу вверх - сдвиг
кодов программы в окне на страницу вниз Пользователь также может
редактировать файлы DEVICE.INI, P16PROL.INI и SN.INI.
Обладатель полной платной версии может самостоятельно настроить
программу под любой новый тип микроконтроллера PIC.
Начинающему пользователю можно порекомендовать только
изменение параметра "ProgDelay=6" в файле
118


Простой программатор Р16РО
P16PROL.INI, если при работе с программатором периодически по-
является сообщение об ошибке. Файлы надо редактировать при по-
мощи неформатирующего редактора, например, стандартного блок-
нота для Windows. Подробно этот процесс описан в файле
README.TXT, но без крайней необходимости редактировать на-
званные файлы не следует.
После того, как программатор изготовлен, и простейшая схема
спаяна, пора приступать к написанию прикладных программ. В
принципе, текст программы можно набрать в любом неформатирую-
щем редакторе, например, в стандартном блокноте Windows, а затем
откомпилировать при помощи фирменной программы ассемблера
MPASM. Но гораздо удобнее воспользоваться интегрированной сре-
дой разработки MPLAB-IDE.
Если вы впервые приступаете к освоению микроконтроллеров PIC
и среды разработки, не пытайтесь с первого раза постигнуть все пре
мудрости работы с MPLAB-IDE и создания сложных проектов.
Лучшим стимулом для изучения программирования микроконтрол
леров является решение практических задач. Сначала освойте основ
ные навыки работы, разберите примеры простейших программ, по
пробуйте поэкспериментировать с ними. Затем, по мере необходимос
ти, вы будете возвращаться к материалу книги. ^ f.; .
ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ MPLAB
Что же такое MPLAB? Это работающая на базе Windows интегри-
рованная среда разработки (Integrated Development Environment -IDE).
MPLAB является свободно распространяемой прграммой, и его
можно загрузить с сайта www.microchip.com или www.microchip.ru.
Эта программа бывает также на некоторых компактгдисках с коллек-
циями программ по радиотехнике.
О ВЕРСИЯХ ПРОГРАММЫ
Когда автор начинал подготовку этой книги, распространялась
версия MPLAB 4.12.00, а когда написание книги близилось к завер-
шению, появилась версия MPLAB 5.00.00. Эти версии не имеют ка-
ких-либо фундаментальных отличий, и, учитывая, что на дисках и "с
рук на руки" продолжает распространяться версия MPLAB 4.12, было
решено дать описание, максимально соответствующее обеим вер-
сиям. Скриншоты даны для версии 5.00.00. Незначительные различия
интерфейса и порядка установки некоторых опций не должны поме-
шать в работе даже начинающему пользователю. В сопроводитель-
119


Часть 2. Руководство для начинающих. Первые шаги
ном релизе к версии 5.00.00 компания Microchip® сообщает об изме-
нениях и исправлениях, мы рассмотрим наиболее важные:
• Все опции программы, касающиеся выбора типа контроллера и
настройки параметров разработки и отладки сведены в одно диало-
говое окно Options>De\'elopment Mode... с закладками, расположе!;!-
ными в удобном порядке. Диалог интерактивный: многие опции ста-
новятся доступны или отключаются в зависимости от того, какой
контроллер выбран и какой режим задан.
• Опции настройки параметров оболочки, ранее распределенные
по независимым пунктам меню, теперь объединены в диалоговом ок-
не Options>Emnronment Setup..., где задаются все параметры, начиная
от системных цветов и заканчивая путями сохранения файлов. Что
очень удобно, можно настроить параметры проекта по умолчанию,
включая язык программирования и пути к различным компонентам
проекта.
• Все управление точками останова, исключая 1радиционную пра-
вую кнопку мыши, сведено в одно диалоговое окно Debug>Break
Settings.
• Доработаны файлы помощи и добавлена развернутая контекстная
помощь для многих окон.
• Пользователям, которые ранее использовали общие файлы
скриптов компоновщика, включающие в себя скрипты для группы
контроллеров, надо иметь в виду, что теперь для каждого контролле
ра существует свой скрипт (файл с расширением .1кг). Например, те
перь вы не можете использовать скрипт 16C76.LKR для процессоров
16С77, 16F876 или 16F877, как делали это раньше.
• В компоновщик MPLINK внесен ряд специальных изменений для
обеспечения поддержки нового семейства PIC18CXXX. ' '"
• Смотровое окно MPLAB по умолчанию не поддерживает 24-
битовый формат Microchip и формат IEEE с плавающей запятой. При
создании нового смотрового окна эти форматы следует выбирать в
окне параметров, открывающемся при нажатии кнопки "Properties".
• При использовании эмулятора PICMASTER дисплей стека те-
перь корректно отображает как инструкцию, так и адрес. ^^ .,„ .,^ v
• Теперь вместе с проектом сохраняются дополнительные опции,
например тип резонатора. ,, . ,^
• В окне трассировки теперь можно отображать протокол в виде
дцзассемблированного кода, исходного кода или обоих одновремен-
но.- :.. .... . ..._ 2 . ...
• Теперь, если в процессе отладки вы измените исходный текст, то
прежде чем продолжить выполнение (симуляцию) программы,
120


Интегрированная среда разработки MPLAB
MPLAB спросит, не следует ли перекомпилировать программу для
получения нового кода.
• Вы можете настроить собственную панель инструментов при по-
мощи отдельного пункта в диалоговом окне Options>Environment
Setup, "• 'v
• Теперь MPLAB поддерживает относительную адресацию из окна
выполнения программного кода. Ранее при помощи меню
Debug>Execute>Execute an Opcode вы могли исполнить только опера-
цию абсолютного перехода goto хххх, а теперь можете выполнить от-
носительный переход, например, goto+20. ' ' '"^
• Если в свойствах проекта вы зададите генерацию map-файла или
error-файла, они автоматически будут сохранены под именем, соот-
ветствующим имени проекта и с расширениями .тар и .err соответст-
венно. Впоследствии эти имена в любой момент можно изменить.
• Окно, отображающее состояние регистров, сохраняет данные в
промежутках между сессиями. Так, если проект сохранить, когда от-
крыто окно регистров и в нем отображаются данные, то при после-
дующем открытии этого проекта автоматически откроется это окно с
сохраненными данными.
•Теперь MPLAB полностью поддерживает компоновку проектов
под Windows NT.
•Окно листинга'^и окно map-файла теперь открываются автома-
тически при повторном открытии проекта, если они были открыты в
момент, когда проект сохранялся.
>> ОФИЦИАЛЬНО ОБЪЯВЛЕННЫЕ ПРОБЛЕМЫ
• Не отображается стек при работе с эмулятором ICEPIC.
• Окно останова по условию не отображает корректные ассемб-
лерные команды и не всегда работает правильно с контроллерами
семейства PIC18CXXX.
• Ошибка динамической библиотеки BWCC.DLL. Если вы по
лучаете от MPLAB сообщение о файле BWCC.DLL, то это, как пра
вило, означает, что приложения на вашем компьютере используют
более старую версию системного драйвера фирмы Borland. MPLAB
также использует этот драйвер. Если версия, более старая, чем ис
пользуемая MPLAB, окажется загруженной в память к моменту запу
ска MPLAB, то появится сообщение об ошибке. Для устранения
ошибки найдите в своем компьютере все файлы с именем BWCC.DLL
и.проверьте их датировку. Файлы, более старые, чем тот, который
идет в комплекте с MPLAB, замените на файл из поставки MPLAB.
• PICMASTER не работает под Windows NT.
121


Часть 2. Руководство для начинающих. Первые шаги
• Новый диалог Options>Development Mode не добавляется на па-
нель кнопок. К нему можно получить доступ только через стандарт-
ное ниспадающее меню.
Развернутое описание MPLAB-IDE и работающего в составе паке-
та ассемблера MPASM способно занять объем, превосходящий объем
этой книги, поэтому ограничимся сжатым описанием, пригодным для
большинства применений. MPLAB включает в себя текстовый редак-
тор, программный симулятор и менеджер проектов, поддерживает
фирменные внутрисхемные эмуляторы и программаторы. Состав па-
кета инструментов MPLAB таков:
Менеджер проектов - используется для создания проектов и рабо-
ты с группой файлов, входящих в проект. При использовании проекта
код программы создается и загружается в симулятор или эмулятор
одним щелчком мыши.
Редактор - используется для создания и редактирования текстовых
файлов, таких как исходные тексты программ, коды и файлы скрип
тов для редактора связей, . ,,,-
Симулятор MPLAB-SIM - программный симулятор, моделирую-
щий исполнение инструкций программы и работу портов вво-
да/вывода микроконтроллера.
Эмулятор MPLAB-ICE - использует аппаратное обеспечение ддя
внутрисхемной эмуляции микроконтроллеров в режиме реального
времени. Может применяться как фирменный эмулятор производства
Microchip®, так и эмуляторы иных производителей, в том числе рос-
сийских, совместимые по стандарту.
Универсальный ассемблер MPASM / Компоновщик связей
МРЫГЧК / Менеджер библиотек МРОВ ассемблер MPASM позволяет
ассемблировать программы, созданные в виде ANSI-текстов без
запуска MPLAB. При работе с MPLAB ассемблер запускается для ге-
нерации кода автоматически и в командной строке ему передаются
имя проекта и параметры, возвращаемые сообщения отображаются в
окнах MPLAB. Компоновщик связей MPLINK создает финальное
приложение путем компоновки перемещаемых программных модулей
из MPASM и MPLAB-C17. Менеджер библиотек MPLIB позволяет
создавать пользовательские "библиотеки и управлять ими для макси-
мального повторного использования ранее написанных программ.
Компилятор MPLAB-C17 - предоставляет возможность создавать
программы на языке высокого уровня в виде комбинации программ
ного текста на языке С и ассемблерных кодов, что позволяет достичь
высокой скорости исполнения кода. Работа с привычным для множе
ства программистов мощным языком С значительно облегчает напи
сание сложных приложений. . ;. .- .. .•-
Ш '


Часть 2. Руководство для начинающих. Первые шаги
НАЧИНАЕМ РАБОТУ С MPLAB
?'ii I
Среда разработки MPLAB представляет собой достаточно мощное
приложение, позволяющее удовлетворить почти все запросы подго
товленного разработчика, но дающее возможность эффективно рабо
тать даже при минимальном знакомстве с программой. Поэтому опи
сание функций программы разбито на два логических подраздела.
Сначала мы освоим базовые навыки. Усвоение этих навыков позво
лит вам немедленно приступить к работе с MPLAB, не тратя время на
получение информации, которая вряд ли понадобится в первые дни
(и, не будучи сразу востребованной, вскоре забудется). Следующий
подраздел, в котором углубленно рассмотрены все функции MPLAB,
для начала можно просмотреть бегло, чтобы иметь представление о
полных возможностях программы, а затем, по мере приобретения
опыта, освоить дополнительные возможности. ' •
УСТАНОВКА РЕЖИМА РАЗРАБОТКИ
Основное окно программы MPLAB выглядит аналогично боль
шинству приложений Windows, у которых вверху расположена панель
меню, а внизу строка состояния. В строке состояния отображается
текущая настройка и состояние отладочной системы. Более подробно
содержание нижней строки мы рассмотрим позже. Сейчас мы разбе
ремся, как настроить режим разработки приложений. ,
В режиме разработки доступны все инструменты, в том числе для
отладки исполняемого кода. Для обучения и отладки большинства
несложных приложений достаточно использовать встроенный про-
граммный эмулятор MPLAB-SIM. В дальнейшем, если вы приобрете-
те один из фирменных эмуляторов, вы можете легко выбрать в меню
отладку с его применением. Режим "Editor Only" ("Только редактор")
применяется, если вы не стали инсталлировать симулятор и не имеете
фирменного эмулятора. В этом случае вы сможете только писать тек-
сты и создавать исполняемые коды без отладки.
Выберите в меню пункт Options>Development mode, который от-
крывает окно настройки этого режима. Выберите опцию "MPLAB-
SIM Simulator" в колонке слева и процессор PIC16F84 в ниспадающем
меню справа. Затем нажмите кнопку "Reset" на панели инструментов
или функциональную клавишу . Симулятор инициализируется, в
нижней строке можно будет видеть надписи "PIC16F84" и "sim", про-
грамма сейчас настроена для программной симуляции контроллера
PIC16F84.
124


Интегрированная среда разработки MPLAB
-•5V СОЗДАНИЕ НОВОГО ПРОСТОГО ПРОЕКТА
Мы только что настроили программный симулятор, который ра-
ботает с hex-файлами, записываемыми непосредственно в контроллер.
Но чтобы получить hex-файл, сначала надо написать исходный текст
программы и успешно его проассемблировать. Результатом работы
ассемблера будет файл с расширением .hex и несколько файлов со
служебными сообщениями (сообщения линкера, сообщения об ошиб-
ках и т.д.) Затем hex-файл можно будет загружать в программатор не
используя ассемблер или проект для MPLAB. В качестве наглядного
пособия будем использовать файл tutor84.hex.
Описанию ассемблера, его опций и специальных директив посвящена
отдельная глава. Ее содержание понадобится вам позлее, когда вы
научитесь создавать проекты и писать простые программы. Того, что
вы прочтете в этой главе, вполне достаточно для начала работы.
Выберите в меню File>New и вы получите доступ к диалоговому
окну создания нового проекта. Нажмите кнопку "Yes", выберите имя
для своего первого проекта и путь для его сохранения. Хорошо его
запомните, он понадобится в дальнейшем,,но.не во всех окнах про-
граммы этот путь очевиден по умолчанию - небольшой недочет раз-
работчиков. Мы выберем для обучения имя файла tutor84.pjt в папке
c:\tutorial, которую создадим заранее.
Нажав ОК перейдем к окну настройки опций проекта. Симулятор,
программатор и эмулятор могут работать с hex-файлами, которые
созданы при помощи ассемблирования компилирования и/или ком-
поновки исходных кодов. Несколько различных программных инст-
рументов могут создавать hex-файлы, и каждый такой инструмент
может являться частью любого проекта. Надо сказать, что писать и
ассемблировать программы можно и без создания проекта, но на-
личие проекта позволит в дальнейшем гибко выбирать, какие инст-
рументы будут использованы для создания hex-файла, один раз и на-
всегда задать командную строку ассемблера и пути для всех использу-
емых файлов. Поэтому лучше сразу обучаться работе с проектами.
Итак, в секции Project, строка Target Filename вы видите имя фай-
ла, префикс которого соответствует имени проекта, но с расширением
hex. В нашем случае это tutor84.hex, под таким именем будет сохранен
код программы после ассемблирования, в той же папке, что и проект.
Следующие три строки пока не трогаем, они понадобятся, когда бу-
дем создавать более сложные комплексные проекты.
Далее видны опции, установленные ранее (MPLAB-SIM, 16F84) и те-
кущий словарь языка программирования (Microchip). Это именно те
значения, которые нам нужны, поэтому не следует их изменять. В секции
Project Files находится запись tutor84[.hex]. Щелкнув на этой записи, мы
125


Часть 2. Руководство для начинающих. Первые шаги
увидим, что стала доступной кнопка Node Properties. Прежде чем созда-
вать hex-файлы, мы должны сформулировать опции для ассемблера, ко-
торые MPLAB будет передавать в командной строке. Нажмем кнопку
Node Properties и перейдем к соответствующему окну.
Окно опций ассемблирования содержит все установки, заданные по
умолчанию. Инструментом с базовым языком для написания программ
является ассемблер MPASM, кроме него доступны несколько
компиляторов MPLAB-Cxx и компоновщик MPLINK. Мы оставляем
ассемблер MPASM. Далее расположена таблица, в которой галочками
можно отмечать различные опции, но менять ничего не нужно,
поскольку по умолчанию установлены именно те опции, которые нам
нужны. В строке ниже таблицы отображается командная строка,'^
которая будет передана ассемблеру. Все параметры таблицы (и, соот-
ветственно, командной строки) мы подробно рассмотрим в главе,
посвященной ассемблеру. Нажав на кнопку ОК мы возвращаемся в
предыдущее окно, при этом становится доступной кнопка Add Node.
(В версии 5.00.00 и далее эта кнопка доступна сразу, и это правильно.
Ведь мы очень часто используем параметры по умолчанию - прим. ав-
тора) Нажмите эту кнопку. Появится окно для ввода имени файла,
введите туда имя исходного файла tutor84.asm, этот файл будет нахо-
диться в той же папке, которую вы указали для проекта tutor84.pjt.
Нажав ОК вы вернетесь к предыдущему окну, где будет отображено
имя tutor84.asm внизу, после tutor84.hex. Еще раз нажмите ОК, окно
закроется в рабочем окне MPLAB будет открыто безымянное окно
текстового редактора для ввода исходного кода программы. (К со-
жалению, окно безымянное, а не именовано автоматически как
tutor84.asm, что следовало бы из всей логики предыдущих и дальнейших
действий).
СОЗДАНИЕ НОВОГО ПРОСТОГО ИСХОДНОГО ТЕКСТА
Выберите пункт меню File>Save As... и назвав файл как
tutor84.asm, сохраните его под этим именем. Теперь мы имеем чистое
окно для ввода текста программы с именем tutor84.asm. В случае с
нашим проектом имя файла должно быть идентично имени проекта.
Когда создается проект, использующий компоновщик, имена вход
ных файлов могут отличаться от имени выходного файла. MPASM
также создает выходной iiex-файл с тем же именем, что и исходный
asm-файл, поэтому, если вам нужен hex-файл с конкретным именем,
назовите этим именем исходный текст или самостоятельно переиме
нуйте впоследствии выходной файл. . ? , .
:. ''? ... ^ ? -1 -?',•?•11. . /.. •-,• ,,'.<•' • ч .H'j-i ? ?•'?>
126


Интегрированная среда разработки MPLAB


ВВОД исходного ТЕКСТА
Щелкните указателем мышки на чистом текстовом поле окна редак-
тора и введите приведенный ниже текст. Комментарии, следующие после
точки с запятой, вводить не надо. Текст надо вводить построчно.
•^i' ''1.1 • I,
list р= 16F84 ;задали тип контроллера
include ;подключили файл опций
?J.I
с1 equ ОхОС ;присвоили переменной с1 ячейку с адресом
;(кОС
org
? 'T ,f
0x00
rese
t
goto
start
org

0x04
start movlw
0x09

movwf
cl
loop incfsz
cl,f

V л ал

goto
loop
Wii .
.goto
end
start
;стартовый адрес, равный вектору сброса
;переход на старт основной программы
;базовый адрес для начала кода пользователя
;запись в счетчик начального значения, 0x09
;сохранение значения в переменной с1
;инкремент значения с сохранением резуль
;тата в cd А / >
;повтор цикла, если результат не равен нулю
;если счетчик с1 обнулился, возврат на старт
Это пример простейшей программы, которая циклически инкре-
ментирует ранее объявленную переменную с1 и по ее обнулению воз-
вращается на адрес старта по сбросу, после чего работа программы
повторяется. Первые две строки и последняя строка являются дирек-
тивами ассемблера. Последняя строка означает конец программного
кода. Первая строка указывает ассемблеру, для какого контроллера
написан текст, вторая строка указывает на специальный файл
pl6F84.inc, в котором заранее, самой фирмой Microchip®, указаны
опции ассемблера именно для этого контроллера. В частности, там
указаны адреса регистров INTCON, OPTION_REG и других, поэтому
при написании программы нет нужды указывать заново их адреса, а
можно просто упоминать их имена. Файл находится в каталоге
MPLAB. Вы можете открыть его при помощи стандартного блокнота
Windows и просмотреть текст, но, не имея достаточной подготовки,
не следует его изменять. Подробно все опции и команды ассемблера
мы рассмотрим в соответствующей главе. Закончив ввод текста и
проверив его правильность, сохраните файл.
В дальнейшем, для упрощения написания программ, можно вос-
пользоваться готовым файлом-заготовкой, расположенным по адресу:
C:\Program Files\MPLAB\TEMPLATE\Code\f84temp.asm. Этот тек-
стовый файл уже содержит заголовок с местом для имени авторов,
необходимые директивы и опции, стартовый фрагмент программы и
даже фрагмент кода подпрограммы для сохранения и последующего
127


Часть 2. Руководство для начинающих. Первые шаги
восстановления значений аккумулятора W и регистра STATUS (как
вы помните, у контроллера PIC16F84 нет команд PUSH и POP). Вам
остается только открыть этот файл в редакторе MPLAB, затем сохра
нить копию под нужным именем и ввести код своей программы. Не
забудьте проверить и установить такие опции слова состояния кон
троллера, как тип тактового генератора, включение сторожевого
таймера и т.д.! По умолчанию сторожевой таймер включен, и, если
его использование у вас не предусмотрено, он будет каждые несколь
ко миллисекунд сбрасывать контроллер. Несоответствие слова состо
яния реальным потребностям вследствие рассеянности - очень рас
пространенная ошибка. ••-'г'.п
Рассматривая все последующие примеры, мы будем подразумевать,
что вы используете файл-заготовку f84temp.asm и не станем приво-
дить никакой иной текст, кроме текста программы.
ПОДРОБНЕЕ О РЕДАКТОРЕ MPLAB EDITOR
Как вы только что убедились, вводить исходный текст программы
легко даже начинающему программисту. Тем не менее, не следует лег-
комысленно относиться к изучению приемов работы с текстовым ре-
дактором MPLAB Editor, в окне которого мы только что набирали
текст. Когда текст программы разрастается, все больше рабочего
времени уходит на его ввод и редактирование; подчас даже отладка
занимает гораздо меньше времени, чем ввод текста. Для удобства на-
писания программы большое значение имеет и то, как текст програм-
мы отображается на экране: нумерация линий, отступы, размер и цвет
шрифта. Причем разные программисты имеют разные пристрастия.
Редактор MPLAB Editor, являющийся интегральной частью среды
разработки MPLAB-IDE, обладает многими дополнительными функ-
циональными удобствами, освоение которых облегчает дальнейшую
работу. Максимальная длина текста программы и количество одно-
временно открытых окон зависят только от объема памяти вашего
компьютера.
При настройке редактора вы можете установить опции по
умолчанию, которые будут действительны для каждого открываемого
окна редактора, и текущие опции, которые действительны только для
данного окна и только во время данной сессии. Текущие опции нуж-
ны, если, например, только в конкретном окне надо включить или
отключить нумерацию строк, задать нестадартный отступ по клавише
"Tab" и т.д.
Опции по умолчанию устанавливаются в диалоговом окне
Options>Environment Setup>Default Editor Modes.
128


Часть 2. Руководство для начинающих. Первые шаги
СОЗДАНИЕ ТРАФАРЕТНЫХ ФАЙЛОВ
Как избавиться от повторения набора одних и тех же фрагментов
программного текста при создании новых исходных файлов? Вы мо
жете каждый раз находить и копировать нужные фрагменты из ранее
созданных файлов и вставлять их в новый текст, но такой метод мо
жет привести к появлению ошибок. Редактор MPLAB Edit позволяет
создавать специальные трафаретные файлы и вставлять заранее под
готовленные текстовые файлы или фрагменты текста в новые файлы.
Вы можете использовать готовые трафареты, находящиеся в подди
ректории Template папки MPLAB, или создать свои собственные. Мы
уже упоминали файл-заготовку f84temp.asm, который используется
при создании программ для PIC16F84. . •.._ ._: •
Создайте файл трафаретов с расширением .tpl:
Edit>Template>Create File. Введите имя файла и путь для сохранения.
Если вы хотите, чтобы это файл автоматически становился доступным
для всех ваших проектов, назовите его auto.tpl.
Выберите пункт меню Edit>Template>New и создайте свой текст
трафарета или используйте текст готовых файлов из каталогов
MPLAB\Templates\Code или MPLAB\Templates\Object, открыв нуж-
ный файл, например f84temp.asm и скопировав оттуда текст в окно
своего файла. Затем поместите курсор в каждое место своей заготов-
ки, куда впоследствии разработчик (или вы сами) должен вставить
свой текст и вставьте туда маркеры: Edit>Template>Insert Mark. Впос-
ледствии эти маркеры будут нужны для быстрого доступа к нужному
месту текста.
Сохраните свой новый файл командой Edit>Template>Store As.
Выберите имя файла и нажмите ОК. Вы можете повторить описанные
выше шаги и создать сколько угодно трафаретных файлов, например,
для каждого типа приложений или для каждого типа контроллера.
Подключение трафаретных файлов к своим исходным текстам
Используя команду Edit>Template>Attach File подключите нужный
трафаретный файл. Файл с именем auto.tpl, как мы уже говорили,
подключается по умолчанию. Откройте имеющийся исходный текст
программы {ЕИе>Ореп)или создайте новое окно исходного текста
{File>New), куда вы будете вставлять содержимое трафаретного фай-
ла. Поместите курсор на то место, куда вы будете вставлять ранее
приготовленный текст-шаблон. Выберите в меню команду
Edit>Template>Insert, выберите трафаретный файл из списка, выдели-
те шаблон и нажмите ОК. Команда Edit>Template>Find Mark позво-
ляет быстро находить нужные шаблоны для вставки в ваш собствен-
ный текст программы.
132


Часть 2. Руководство для начинающих. Первые шаги
реключает "четыре группы кнопок, применяемых для различных це
лей. Убедитесь, что отображается группа, в которую входят кнопки
со стилизованными иконками светофора и человеческих следов.
Сейчас нам понадобится именно эта группа. При наведении указателя
мыши на кнопку в строке состояния отображается название запуска
емой этой кнопкой функции. "' . »
Инициализируйте систему нажатием кнопки "Reset" с изображени-
ем символов перепада уровня и "#####". Программный счетчик будет
сброшен на ноль, что соответствует reset-вектору для PIC16F84.
Строка исходного кода, соответствующая этому адресу, выделена
темным фоном. В строке статуса MPLAB отображается состояние
программного счетчика РС:ОхОО. По мере исполнения программы
выделение смещается. Нажмите кнопку "Step" с изображением следов
ноги. Будет выполнена первая команда (в нашем случае goto start).
Программный счетчик будет показывать РС:0х04, темная строка пе-
реместится на следующую исполняемую команду. Для пошагового
выполнения можно также использовать функциональную клавишу
. Понажимайте клавишу несколько раз и наблюдайте, как
перемещается по тексту затемненная строка и изменяются показания
программного счетчика. Нажмите клавишу "Run" с зеленым светофо-
ром или функциональную клавишу , чтобы запустить программу
в режим непрерывного исполнения. Цвет строки состояния изменится,
показывая, что программа находится в режиме исполнения. До тех
пор, пока программа не остановлена, никакие поля в строке состояния
не могут быть изменены.
Остановите программу нажатием на кнопу с красным светофором
или функциональную клавишу . Цвет строки состояния вернется
к исходному и будет отображено текущее значение программного
счетчика и другие параметры состояния.
^ ОТКРЫТИЕ ДРУГИХ ОКОН ОТЛАДКИ
Используя программу MPLAB можно контролировать различные
параметры исполнения программы. Например, наша программа
должна периодически инкрементировать переменную счетчика, но как
это увидеть, чтобы убедиться, что программа работает правильно?
Одним из способов является использование окна, отображающего
значения, хранимые в регистрах общего применения. В нашей про-
грамме для хранения значения переменной с1 используется регистр
общего применения по адресу ОхОС. Нажмите кнопку с надписью
"RAM". Интересующее нас значение находится на пересечении строки
0000 и столбца ОС. Когда содержимое одной из ячеек изменяется, оно
выделяется красным светом, что облегчает контроль над работой
136


Интегрированная среда разработки MPLAB
программы. Но если вы отлаживаете сложную программу, использу-
ющую большое число часто изменяемых переменных, становится
трудно определить, какая переменная изменилась в данный момент
времени, поскольку красным цветом выделены несколько значений.
Для решения этой проблемы существует так называемое смотровое
окно (watch window).
Создание смотрового окна
': Нажмите кнопку "Create New Watch Window" с изображением
очков, либо выберите пункт меню Window>New Watch Window. В ди-
алоговом окне введите имя переменной с1 в поле "Simbol", или выбе-
рите его в прокручиваемом списке. Нажмите "Add", затем "Close". Вы
создали смотровое окно, которое выборочно отображает значение
только переменной с1. Можно создать смотровое окно, которое од-
новременно отображает значения нескольких переменных или регис-
тров. В этом случае надо нажимать 'Add" для каждого нужного
значения из списка, а закончив формировать список нажать "Close".
Нажмите несколько раз клавишу чтобы проверить, как изменя-
ется значение переменной с1.
Сохранение смотрового окна ,,.. , ,.,
^ Для сохранения всех настроек текущего смотрового окна нажмите
кнопку в его левом верхнем углу и выберите строку "Save Watch".
Введите любое корректное имя и нажмите ОК. Настройки будут со-
хранены в текущем рабочем каталоге, где расположен весь проект.
При сохранении проекта также сохраняется вся информация об от-
крытых и закрытых окнах, их размерах и расположении на рабочем
столе. При последующем открытии проекта автоматически восста-
навливается исходное состояние всех окон.
Ранее созданное смотровое окно впоследствии можно отредакти-
ровать. Нажав на кнопку в левом верхнем углу, выберите "Edit Watch"
чтобы удалить из окна ненужные значения, или "Add Watch" чтобы
добавить новые значения. Кроме этого, для каждого из отображаемых
значений, нажав кнопку "Properties", можно выбрать, как оно будет
отображаться: в битовом, шестнадцатеричном или ASCII формате и
т.д.
ЗАДАНИЕ ТОЧЕК ОСТАНОВА
Если программа находилась в процессе симуляции, нажмите ,
чтобы остановить ее. Щелкните мышкой непосредственно перед мет-
кой "start" нашей учебной программы. Нажмите правую кнопку мы-
137


Часть 2. Руководство для начинающих. Первые шаги
ши и в появившемся меню выберите опцию "Break Point(s)". Строка, в
которой расположен курсор, изменит свой цвет, сигнализируя, что
сразу после исполнения команды в этой строке выполнение програм-
мы остановится.
Сбросьте систему в исходное состояние клавишей , затем за-
пустите на исполнение клавишей . При достижении точки оста-
нова симулятор остановится на строке, следующей за точкой останова
(но эта команда не выполнится). Если нажать клавишу еще раз,
симуляция программы продолжится как обычно, вновь изменится
цвет строки состояния, но наша программа работает в цикле, поэтому,
после достижения точки останова, симулятор вновь остановится.
Разумеется, когда программа работает в цикле, и не достигла точки
останова, ее можно остановить нажатием клавиши . Когда
программа остановлена, в смотровом окне и окне регистров общего
применения отображаются текущие значения регистров.
'? *' ^ ?'' • -' Дополнительные рекомендации ' -
Вы можете задать равнозначные точки останова в таких окнах, как:
Window>Program Memory.
Window>Absolute Listing.
Окно исходного текста (как было описано выше).
Если работаете с проектом, используйте окно Wmdow>ProJect для
быстрого вызова файлов, входящих в проект. Двойной щелчок на
имени файла, выделенного цветом, открывает его в окне редактиро-
вания.
Биты конфигурации, заданные в исходном тексте программы,
(такие, как тип резонатора, включение/выключение сторожевого тай-
мера и т.д.) не устанавливают автоматически соответствующие опции
процессора для симулятора или эмулятора. Например, если в тексте
программы вы установили опцию "WDT_OFF" - сторожевой таймер
выключен, то соответствующий бит будет сброшен при записи про-
граммы в кристалл при помощи любого программатора. Для от-
ключения этого же режима в симуляторе или эмуляторе MPLAB не-
обходимо с помощью меню Options>Processor Setup>Hardware от-
ключить соответствующий режим. Такое отсутствие прямой связи
между опциями в программе и режимом симулятора позволяет в про-
цессе отладки изменять параметры, не меняя исходный текст.
Используя меню Options и Options>Environment Setup, вы можете:
- модифицировать панель инструментов
- установить расположение панели инструментов
- изменить количество знаков для меток и имен регистров
- настроить экранные шрифты
138


Интегрированная среда разработки MPLAB
- перенастроить "горячие клавиши" для функциональных клавиш
и специальных символов ASCII. /'I • • , ?• •
" ПОДРОБНЕЕ О ПРОЕКТАХ В MPLAB
Итак, вы научились работать с программой MPLAB на уровне,
достаточном для написания и отладки простых программ (при усло-
вии знания ассемблера). Даже на этом уровне работа с проектами дает
некоторые преимущества. Если вы будете и дальше практиковаться в
создании практических приложений, у вас обязательно накопится
своя коллекция программ, библиотек, фрагментов кода. При написа-
нии сложных приложений значительно удобнее "собирать" програм-
му из готовых отработанных фрагментов и использовать свободно
распространяемые библиотеки и отдельные подпрограммы. При этом
нежелательно чрезмерно отвлекаться на заботу о том, чтобы все
необходимые файлы были упорядочены и соответственно именованы.
Использование проектов, в том числе сложных, когда программа при
помощи компоновщика собирается из нескольких источников, ощу-
тимо облегчает и упорядочивает процесс разработки.
4i.- . ,
ЧТО ТАКОЕ ПРОЕКТ? ,.
Проектом в MPLAB называется группа файлов, необходимых для
создания приложения путем обработки этих файлов соответствую-
щими программными инструментами. Готовый проект состоит из
модуля проекта (описания проекта) и одного или нескольких исход-
ных модулей (файлов). Исходными модулями могут быть: обычные
исходные файлы MPASM, исходные файлы MPLAB-C17, предвари-
тельно скомпилированные библиотеки и объектные файлы, скрипты
компоновщика. Обычно проект помещается в ту же директорию, что
и главный исходный файл.
Когда вы создаете проект, то должны указать для него соответст-
вующий инструмент обработки, за исключением тех случаев, когда
такое указание излишне. Например, если вы используете MPASM и
один исходный файл, как было описано ранее, то не нужно присоеди-
нять обработчик исходного модуля, поскольку модуль проекта из-
начально настроен на применение MPASM. Аналогично, предвари-
тельно скомпилированные библиотеки и объектные файлы, скрипты
компоновщика для MPLAB-C17 или MPASM не нужно связывать с
обработчиком, поскольку они всегда обрабатываются при помощи
MPLINK.
139


Интегрированная среда разработки MPLAB
Properties" задайте параметр "Language Tool: MPLINK" и нажмите
ОК. Затем в окне "Edit Project" нажмите кнопку "Add Node" для до-
бавления исходных файлов. Для вас уже заботливо приготовлены два
файла примера, example.asm и exarnple2.asm (в вашем собственном
проекте исходных файлов может быть намного больше). Вы можете
вставить их одновременно, выделив сразу все названия традицион-
ным для Windows способом: держа нажатой клавишу и щелк-
нув поочередно на каждом имени, либо выделив первое имя и, при
нажатой клавише , щелкнув на последнем имени. Можно
вставлять файлы и поочередно. Важно только, чтобы все они были в
одном подкаталоге с проектом. В принципе, опции обработки ("Node
Properties") для каждого исходного файла могут быть разными, но
чаще их делают одинаковыми. Мы сейчас тоже не будем вносить раз-
личия. Можно применить кнопку "Сору Node", которая специально
используется для того, чтобы задать одинаковые опции обработки для
всех файлов. Для этого в нижнем окошке "Project Files:" кнопкой
"Add Node' добавьте файл, опции которого будут образцом. Выделите
имя этого файла щелчком мыши и нажмите кнопку "Сору Node".
Выберите один или несколько файлов, которые надо добавить, и на-
жмите ОК. Файлы будут добавлены с теми же опциями обработки,
что и первый файл.
Теперь надо задать скрипт компоновщика, или линкер-скрипт. Это
специальный файл для MPLINK, который описывает архитектуру
памяти каждого микроконтроллера. Стандартные скрипты по-
ставляются вместе с MPLINK и находятся в корневой директории
MPLAB. Для нашего примера используется файл picl6f84.1kr, распо-
ложенный в поддиректории \MPLAB\EXAMPLE. Нажмите кнопку
"Add Node', в окне выбора файла задайте тип файла - скрипт компо-
новщика и выберите picl6f84.1kr. Опции "Node Properties" для файлов
скрипта не задаются, she.. .?..»>им»вл«« ' ••-пи • > f ^< -i ^у
Нажмите кнопку ОК диалогового окна "Edit Project". На этом со
здание проекта закончено. Мы ничего не вводили в поля Include Files,
Library Files и Linker Script Files, потому что все необходимые файлы
располагались в одном подкаталоге с проектом. В противном случае
необходимо ввести соответствующие пути. '?
Выберите пункт меню Pwject> Маке Project и проследите, как
проходит компиляция и сборка проекта. Если вы все сделали пра-
вильно, процесс завершится успешно. Теперь вы можете смело экспе-
риментировать с уже имеющимися файлами или создать свой проект.
Напоминание: используйте окно Window>Project для быстрого вызова
исходных файлов, входящих в проект. Двойной щелчок на имени файла,
выделенного цветом, открывает его в окне редактирования. ' ? •'
143


Интегрированная среда разработки MPLAB
Скорость исполнения программы на симуляторе заведомо ниже,
чем в реальной схеме и, кроме параметров самого компьютера, зави
сит от того, какие приложения Windows работают в фоновом режиме.
Программный эмулятор должен обновлять симулируемые регистры и
RAM, проверять порты ввода/вывода, устанавливать и сбрасывать
флаги, проверять наличие точек сброса и трассировки и симулиро
вать остальные команды. •••< -1-'1. ;•-* гЛ - . 7- . »''
ОГРАНИЧЕНИЯ ПРИ РАБОТЕ С СИМУЛЯТОРОМ
Очень часто в программах применяются вложенные циклы для фор-
мирования периода задержки. Когда вы тестируете программу на си-
муляторе, то рискуете очень сильно затянуть ее исполнение. Временно
уменьшите значения констант циклов, либо вообще временно удалите
задержки, чтобы увеличить скорость симуляции.
Симулятор имитирует обработку портов и внешних выводов син~
хронно с исполнением команд. Поэтому симулятор не мож:ет имити
ровать, например, воздействие короткого (короче одного командного
цикла) спада напрям:ения на выводе MCLR, тогда как реально в этом
случае произойдет сброс процессора. Подобные явления эмулируют
только при помощи внутрисхемного эмулятора, с ?»' •: ' i
г .. Кроме этого, существует еще ряд ограничений для контроллеров с
расширенными функциональными возмож:ностями. Для контро.плеров
со встроенной аппаратной поддермской ШИМ не могут быть симули-
рованы импульсы с шириной менее одного командного цикла. Симулятор
не имитирует работу встроенного последовательного порта вво-
да/вывода. Сравнение сигналов разрядностью более 8 бит не поддерлси-
вается. В режиме асинхронного счета импульсы короче одного команд-
ного цикла не обрабатываются, так как встроенный триггер-защелка
не имитируется.
Тактовые импульсы на выводах RC0/RC1 и их соотношение по вре-
мени с исполняемыми командами не отображ:ается.
,. , , РЕЖИМ АНИМАЦИИ
Режим анимации (animated mode) является способом автома-
тического пошагового исполнения программ. После исполнения каж-
дой команды симулятор останавливается на некоторое время, доста-
точное для того, чтобы рассмотреть значения регистров в соответст-
вующих окнах. Значения в окнах изменяются в момент остановки.
После небольшой задержки выполняется следующая команда.
145


Часть 2. Руководство для начинающих. Первые шаги
ТРИГГЕРНЫЕ ТОЧКИ, ТОЧКИ ОСТАНОВА И ТРАССИРОВКИ
Отладочные функции симулятора основываются на трех основных
элементах: '»'^'' «'• '^
- точки останова
- точки трассировки
^ , - счетчики числа прогонов.
MPLAB позволяет использовать не более 16 именованных
счетчиков в каждом диалоге. Точки трассировки и точки останова
функционируют абсолютно независимо друг от друга и могут быть
установлены в любом месте программы. Чтобы открыть окно наст
ройки точек останова надо выбрать пункт меню Debug>Break
Settings, для настройки точек трассировки соответственно пункт
Debug>Trace Settings. ?*.ч .
- останов по заполнению буфера трассировки
- останов по равенству счетчика прогонов
- останов по переполнению стека
- останов по окончанию периода сторожевого таймера .^^^^^
- пользовательский останов.
В окне программной памяти (Program Memory Window) слева от
программного кода можно увидеть следующие обозначения точек
останова: " ?
В - точка останова;
Т - точка трассировки; . ,,^-.^^, 'r^ti^Tf^*.' . .? т.. .., • - •
Q - адрес счетчика прогонов. > ? * . •: . ч .. •
Останов по совпадению адреса происходит, когда значение про-
граммного счетчика совпадает с заранее заданным значением. На-
пример, если точка останова задана по адресу 8Ch, то процессор ос-
тановится после выполнения команды по адресу 8Ch. Как вы уже
вспомнили, это есть тот останов, который мы изучили ранее, когда
ставили точку останова прямо в программном тексте. Так удобнее,
146


Интегрированная среда разработки MPLAB
В поле "Title" введите имя точки/блока точек трассировки. Оно
понадобится, когда вы будете задавать счетчик числа прогонов для
этой точки либо блока точек. В поле "Start" задайте начальный адрес
трассировки, выбрав из ниспадающего списка имя метки, либо введя
вручную начальный адрес из окна программной памяти. В поле "End"
введите конечный адрес блока трассировки, либо выберите из ниспа
дающего списка имя конечной метки Если ввести в поля "Start" и
"End" одинаковые значения, то будет выбрана одна строка. В данном
примере выбраны строки с адресами от 001 Oh до 0013h. Нажатием на
кнопку с галочкой поместите настроенный указатель трассировки в
список. Можно задать несколько указателей трассировки и, по мере
необходимости, включать или отключать их. Кнопки "Remove АН" и
"Disable All" соответственно удаляют или отключают все точки трас
сировки. Изменять адреса точек трассировки и менять их опции мож
но после занесения в список. Выделите нужную точку трассировки в
списке. Опция "Address is Qualifier" означает, что данный адрес точки
(или диапазон адресов) будет использоваться для изменения счетчика
прогонов. Счетчик прогонов декрементируется при выполнении каж
дой команды. В отличие от случая с точками останова, если счетчик
прогонов подключен в точке трассировки, запись в буфер трассиров
ки начинается только после того, как счетчик прогонов декременти
руется до ноля.
Если верить руководству в программе MP LAB, то, когда счетчик
прогонов подключен в точке трассировки, трассировка не начинается
до тех пор, пока счетчик прогонов не обнулится. Только после этого
начинается заполнение буфера трассировки. Но в действительности, в
имеющихся у автора версиях программы, при обнулении счетчика про-
гонов процессор останавливается независимо от того, подключен
счетчик в точке останова или в точке трассировки.
Трассировка может быть остановлена независимо от продолжения
симуляции программы. Во время симуляции с трассировкой нажмите
кнопку "Halt Trace". Трассировка остановится, в окне трассировки
можно будет увидеть ее результаты, но процессор не остановится.
Повторное нажатие на кнопку "Halt Trace' возобновит трассировку с
текущего момента.
УДАЛЕНИЕ ТОЧЕК ТРАССИРОВКИ И ОСТАНОВА
Чтобы удалить все точки останова и трассировки выберите пункт
меню Debug>Clear All Points и нажмите ОК. Все точки будут удалены.
Операция необратима.
151


Интегрированная среда разработки MPLAB
зовании аппаратного эмулятора в режиме real-time надо иметь в виду,
что режим real-time прерывается на время проверки условия.
Update Display - когда эта опция выключена, не происходит дина-
мическое обновление отображения дизассемблированного кода в ок-
не справа. Список выполненных команд (протокол исполнения про-
граммы) в этом случае выгружается в окно с момент останова. Длина
буфера окна 1000 строк. Отключение динамического обновления ус-
коряет симуляцию.
Conditions - условие, на основании которого сопоставляются
значение одного из регистров в 8-битное значение, которое вы ввели в
поле Value. . • ^
Условие выбирается в ниспадающем списке. Помните: значения ре-
гистров анализируются как 8-битные числа без знака, поэтому условие
"... Каждое окно в
верхнем левом углу имеет кнопку системного меню. При нажатии на
эту кнопку открывается ниспадающее меню, в котором можно вы-
брать один из вариантов или форматов отображения данных в окне.
Program Memory показывает расположение данных в памяти про-
грамм. Используя кнопку системного меню, можно представить дан-
ные в одном из трех форматов:
Hex Code Display - содержимое программной памяти представлено
как шестнадцатеричные данные.
Machine Code Display - содержимое программной памяти показано
как дизассемблированные коды, но без символьной информации.
Disassembly Display - показаны дизассемблированные коды с сиы
вольной информацией (имена регистров, метки).
Когда данные представлены в виде дизассемблированных кодов,
текущее положение счетчика адреса программы подсвечивается ин-
версной строкой. Другие окна MPLAB могут вносить изменения в
153


Часть 2. Руководство для начинающих. Первые шаги
окно программной памяти. Например, установка точек останова или
трассировки изменяет цвет соответствующих строк окна Program
Memory.
Trace Memory отображает "снимок" хода выполнения вашей про-
граммы. Если у вас есть эмулятор с буфером трассировки, то в окне
отображается содержимое его буфера при выполнении программы с
реальной скоростью. Некоторые приложения, например, программа
управления шаговым двигателем, не могут быть остановлены для
просмотра содержимого регистров, и, соответственно, некоторые
ошибки могут быть выявлены только тогда, когда приложение не-
прерывно работает. Для использования аппаратного буфера эмуля-
тора надо воспользоваться описанием эмулятора.
В режиме симулятора буфер трассировки применяется для того,
чтобы запротоколировать ход выполнения программы и впоследствии
его проанализировать. Способ отображения в окне также выбирается
при помощи кнопки системного меню. Чтобы воспользоваться окном
трассировки, сначала задайте точки или диапазон трассировки как
было описано выше. Симулятор помещает метку времени в каждой
строке и регистрирует, какие регистры изменили свое значение при
выполнении отмеченной команды.
EEPROM Memory показывает содержимое EEPROM, если симу
лируемый контроллер имеет такую память. Содержимое EEPROM не
может быть изменено в этом окне. Для изменения данных обратитесь
к меню Wmdow>Modify... '?•.•';• :•
Calibration Memory показывает содержимое калибровочных кон-
стант, если контроллер содержит калибровочную память. Это, на-
пример, распространенный контроллер 12С509, в котором применя-
ется встроенный тактовый генератор, и калибровочные константы
настраивают тактовую частоту. Внешний вид этого окна может быть
разным, в зависимости от типа контроллера.
Absolute Listing - файл листинга, сгенерированный компилятором
или ассемблером и показывающий исходный код совместно со сгене-
рированным объектным кодом.
Stack показывает содержимое стека в процессе выполнения про-
граммы. Если включен останов по переполнению стека, MPLAB мо-
жет выдавать соответствующее предупреждение, когда это происхо-
дит. Для настройки останова и предупреждения по переполнению
стека выберите меню Option>Development Mode>Break Options, как
это было описано ранее, в подпункте "Останов по условию".
File Registers - показывает содержимое регистров общего пользо-
вания (значейия пользовательских переменных). Значения, изменив-
шиеся при.выполнении программы, выделяются красным цветом. Со-
154


Интегрированная среда разработки MPLAB
держимое может отображаться в трех вариантах, переключаемых
кнопкой системного меню:, ^ ,,, . ,. , ,.,
Hex Display представление в виде таблицы шестнадцатеричных
данных.
Simbolic Display - каждый регистр представлен в виде данных в
шестнадцатеричном, двоичном и символьном формате с указанием
соответствующего имени регистра (переменной). Наиболее удобный
для отладки формат.
ASCII Display - представление данных в виде соответствующих
ASCII символов.
Special Function Registers (SFRs) - показывает содержимое функ-
циональных регистров контроллера одновременно в нескольких фор-
матах. Содержимое регистров можно легко изменить дважды щелк-
нув мышкой на имени нужного регистра. Откроется окно "Modify", в
которое уже будет занесено имя регистра и его предыдущее значение.
Введите новое значение и нажмите кнопку "Write".
Show Simbol List - показывает имена и адреса всех служебных и
пользовательских переменных меток, встречающихся в программе.
Эти данные сохраняются в файле *.COD вашего проекта.
Stopwatch and Clock Frequency - окно секундомера позволяет из-
мерять время выполнения кода. Но вычисления не всегда точны в по-
шаговом режиме. Время выполнения рассчитывается исходя из такто-
вой частоты контроллера. Тактовая частота задается в диалоге
Options>Development Mode>Clock (или Options>Processor Setup>Clock
Frequency для старой версии MPLAB). Перед установкой тактовой
частоты сверьтесь с техническим описанием контроллера. Откройте
окно секундомера, обнулите показания кнопкой "Zero" и запустите
программу на выполнение. В окне секундомера будут периодически
изменяться значения числа командных циклов и затраченного на них
времени. Для измерения скорости прохождения критического участка
программы поставьте первую точку останова непосредственно перед
началом этого участка, а вторую сразу после его окончания. Сбросив
процессор, запустите программу на выполнение. Когда программа
остановится на первой точке, обнулите показания секундомера и
вновь запустите программу. Программа остановится на второй точке,
секундомер будет показывать время выполнения участка и ко-
личество ЦИКЛОВ/, i! 1;Н вГЗМЧИ? О OiW^' 'Simulator
Stimulus>Asinchronous Stimulus. Щелкните правой кнопкой мыши на-
пример, на первой кнопке, обозначенной "Stiml (?)". Откроется диа-
логовое окно, в котором выбирают форму сигнала, воздействующего
на вывод и номер вывода. Доступны следующие формы внешнего
воздействия:
Pulse - изменяет уровень на выводе на противоположный и воз-
вращается в исходное состояние (кратковременный импульс).
High - устанавливает постоянный высокий уровень на входе.
Low - устанавливает постоянный низкий уровень на входе.
Toggle - изменяет уровень входного сигнала на противоположный
и держит его.' • - -? ?
Выберите нужную форму сигнала щелчком мыши на его обо-
значении. Еще раз откройте окно настройки кнопки, щелкните на
"Assign Pin". Откроется ниспадающее меню, в котором обозначены
все доступные для внешнего воздействия выводы контроллера, с ко-
156


Интегрированная среда разработки MPLAB


торым вы сейчас работаете. Двойным щелчком мыши выберите нуж-
ный вывод. Если, например, вы выбрали вывод RBO и вид воздейст-
вия Low, то на кнопке появится соответствующее обозначение "RBO
(L)".
Закончив настройку кнопок, запустите программу на исполнение в
режиме Debug>Run>Animate. Нажимая кнопки, в соответствующих
окнах можно наблюдать изменение уровней на входах портов и реак-
цию программы на эти изменения
Одному и тому же выводу можно поставить в соответствие не-
сколько кнопок и смоделировать самые различные сигналы. Если,
например, сначала при помощи одной кнопки установить низкий
уровень на входе RBO, а затем второй кнопкой на этот вывод пода-
вать импульсы в режиме "Pulse", то мы получим на входе RBO поло-
жительные импульсы, возникающие в момент нажатия кнопки. И на-
оборот, если сначала установить на RBO постоянный высокий уро-
вень, то получатся импульсы отрицательной полярности. Длитель-
ность импульсов не может быть меньше одного командного цикла.
ФАЙЛ ОПИСАНИЯ ВНЕШНЕГО ВОЗДЕЙСТВИЯ
Иногда бывает необходимо имитировать внешнее воздействие в
строго определенный момент времени или выстроить строго описан-
ную последовательность сигналов. Для этого используется специаль-
ный текстовый файл, с расширением .STI, в котором описывается по-
следовательность уровней О и 1 в привязке к командным циклам про-
граммы. Обозначенный в файле уровень сигнала прикладывается к
назначенному выводу в момент, когда значение счетчика циклов в
окне секундомера {Window>Stopwatch) совпадает со значением в
столбце CYCLE файла описания. Для примера срздадим сами про-
стейший файл описания внешних воздействий.
Используя меню File>New File создайте новое окно редактора и
введите приведенный ниже текст. Не обязательно вводить текст ком
ментариев после символов ";" ? "!". " ~
CYCLE RBI RBO о , . -, • '- ?•
20 0 0 ? ? :
41 1 О ; высокий уровень к биту 1 порта В -,.
52 О 1 ; высокий уровень к биту О, к биту 1 низкий
ПА
J J 1 1 j ? • »• f. f • 1
60 .0 0 .
65 Г О ; инверсия бита 1, затем.
76 :u..Q .1 ; ...еще инверсия бита О
157


Часть 2. Руководство для начинающих. Первые шаги
Из содержания файла следует, что, начиная с 20-го командного,
цикла по 40-й ко входам RB1 и RBO будет приложен низкий уровень,
начиная с 41-го по 51-й командный цикл ко входу RB1 будет прило-
жен высокий уровень, а состояние на входе RBO в это время не изме-
нится, и так далее. Для точного определения соответствующих
значений счетчика циклов можно воспользоваться окном секундомера
в сочетании с точками останова в тех местах программы, где необ-
ходимо изменять внешние уровни на входах.
Используя меню File>Save As... сохраните файл под именем
tutor84.sti там же, где вы ранее сохраняли свой учебный проект
tutor84.pjt. Теперь при отладке программы вы можете открыть это
файл в меню Debug>Simulator Stimulus>Pin Stimulus. Для совместимо-
сти с предыдущими версиями MPSIM первая строка обязательно
должна начинаться со слов CYCLE или STEP. Далее следуют наиме-
нования выводов, принятые в MPLAB. Чтобы увидеть весь список
доступных имен обратитесь, например, к окну настройки кнопок
асинхронного воздействия, в строке могут быть перечислены все до-
ступные выводы. Комментарии отделяются от описания символом
точки с запятой или восклицательным знаком, перед которым и после
которого должно быть не менее одного пробела.
ФАЙЛ СОБЫТИЙ РЕГИСТРА л . . г.гг
Файл событий регистра содержит единственную колонку
значений, которые последовательно записываются в регистр, когда
значение программного счетчика совпадает со значением, указанным
в окне настройки. Последовательная запись значений в регистр может
применяться, например, для симуляции аналого-цифрового преобра-
зования.
Для создания файла событий откройте новое окно редактора, ис-
пользуя меню File>New File, и введите приведенный ниже текст.
10 •• - '
2Е . . """' * / , -
"^^ : , \' 1} и.
• • ;' .< ? « И ^ ' '. . . Program Memory и Window>File Registers. Те-
перь откройте диалоговое окно Debug>Simulator Stimulus>Register
Stimulus>Enable... и поле "Program Memory Address" введите имя мет-
ки loop или ее адрес в программной памяти. В поле "Register Address"
для примера укажите регистр OxOd. Нажав кнопку "Browse..." укажите
путь к файлу внешнего воздействия, который только что создали.
Сбросьте процессор и запустите пошаговое выполнение. Теперь, ког-
да программный счетчик будет достигать заданного адреса, в регистр
будет заноситься очередное значение из файла. Значения повторяются
циклически, пока программа работает. В окне Window>File Registers
вы можете видеть, как меняется значение в регистровой ячейке по ад-
ресу OxOd.
СИМУЛЯЦИЯ ВНЕШНИХ ТАКТОВЫХ ИМПУЛЬСОВ
Симулятор позволяет имитировать воздействие циклических по-
следовательностей на любых выводах контроллера (на нескольких
одновременно и независимо друг от друга). Поскольку программный
симулятор не обрабатывает импульсы короче одного командного
цикла, все параметры длительности измеряются в командных циклах.
Откройте диалоговое окно Debug>Simulator Stimulus>Clock Stimulus...
В поле "Pin selection" выберите из списка нужный вывод. В поле "High
Stimulus Clock Count" введите длительность состояния высокого
уровня (например, 2). В поле "Low Stimulus Clock Count" введите
длительность состояния низкого уровня (например, 4). На заданный
вывод будет воздействовать последовательность прямоугольных
импульсов с соотношением длительностей ноля и единицы 4:2.
Галочка "Stimulus Invert" инвертирует уровни воздействия. Кнопка
"Add" добавляет описание в список воздействия. Кнопки "Open..." и
"Save..." соответственно, открывают имеющийся файл с готовым опи-
санием (расширение .sti) или сохраняют настройки в файле. Кнопка
"Delete" удаляет строку из списка. Кнопка "Apply" должна вносить
изменения в выбранную строку списка (на момент написания книги в
документации не описана и у автора не работала).
На этом мы заканчиваем изучение программы MPLAB. Читатель,
хорошо освоивший этот материал, наверняка сможет самостоятельно
решить все проблемы, возникающие в процессе повседневной работы
с MPLAB.' Для более углубленного изучения следует обратиться к
159


Часть 2. Руководство для начинающих. Первые шаги
полному фирменному описанию, бесплатно распространяемому на
фирменном компакт-диске Microchip®.
АССЕМБЛЕР MP ASM
Ассемблер MPASM выпускается компанией Microchip® в двух ва
риантах: для работы под DOS 5.0 и выше, и под Windows 95/98/NT.
MPASM представляет собой законченное автономное приложение,
включающее в себя макроассемблер и утилиты. В процессе разработ
ки ассемблер чаще всего запускается из MPLAB, а параметры пере
даются автоматически в командной строке. Результаты ассемблиро
вания также выводятся в окно MPLAB. Но ассемблер может быть за
пущен и полностью автономно или из вашей собственной оболочки.
Инсталляция обычно производится автоматически, при установке
пакета MPLAB. Если вы хотите установить MPASM отдельно, вам
надо приготовить для него поддиректорию (папку) с произвольным
именем и распаковать туда при помощи WinZip® или PKZIP® файл
ассемблера, загруженный с веб-сайта компании Microchip® или с дис
ка технической поддержки. ,.. . ,. ,.- .. V. •• J
Ассемблер полностью поддерживает все типы микроконтроллеров
Microchip®, память и другие устройства, выпускаемые этой фирмой.
Достаточно легко осуществляется перевод программного обеспечения
со старого семейства контроллеров на более новое, либо между близ-
кими семействами. Так, например, чтобы перенести программу с кон-
троллера PIC16C54 на контроллер PIC16C71 потребуется лишь заме-
нить несовпадающие мнемоники, поскольку использование регистров
с периферии у них очень схоже. Макрокоманды и большинство ди-
ректив можно не изменять.
MPASM может быть использован для двух целей:
- генерация абсолютного кода, который является окончательным и
предназначен для записи в микроконтроллер при помощи програм-
матора. ,, . , . j . ,^ ,i ,••
- генерация объектного кода, который впоследствии будет связан
с другими ассемблированными или компилированными модулями.
Абсолютный код является для MPASM выходным кодом по
умолчанию. -
Если исходный файл ассемблируется этим способом, то все перемен-
ные источника должны быть явно описаны в тексте программы или в
файле, подключаемом непосредственно в тексте программы при помо-
щи директивы INCLUDE . Если ассемблирование происхо-
дит без ошибок, то генерируется выходной .hex-файл, который затем
при помощи программатора записывается в микроконтроллер.
160
 
Сайт управляется системой uCoz